﻿# V678\. Object is used as an argument to its own method\. Consider checking the first actual argument of the 'Foo' function\.

Анализатор обнаружил вызов нестатической функции\-члена класса, которой одним из аргументов передали этот же объект, на котором она была вызвана\.

Рассмотрим пример:

```cpp
A.Foo(A);
```

Есть вероятность, что этот подозрительный код содержит ошибку\. Например, из\-за опечатки используется неверное имя переменной\. Тогда, корректный код должен был быть таким:

```cpp
A.Foo(B);
```

или таким:

```cpp
B.Foo(A);
```

Давайте посмотрим, как такие опечатки проявляют себя на практике\. Код реального приложения:

```cpp
CXMLAttribute* pAttr1 =
  m_pXML->GetAttribute(CXMLAttribute::schemaName);
CXMLAttribute* pAttr2 =
  pXML->GetAttribute(CXMLAttribute::schemaName);
if ( pAttr1 && pAttr2 &&
     !pAttr1->GetValue().CompareNoCase(pAttr1->GetValue()))
  ....
```

Этот код должен сравнивать два атрибута\. Но из\-за опечатки, значение "pAttr1\-\>GetValue\(\)" сравнивается само с собой\.

Корректный код:

```cpp
if ( pAttr1 && pAttr2 &&
     !pAttr1->GetValue().CompareNoCase(pAttr2->GetValue()))
```