Если нет классов копирования, могу ли я изменить код так, чтобы компилятор VS2010 сообщал об ошибке в ошибочной строке? - PullRequest
3 голосов
/ 27 сентября 2010

Могу ли я изменить код, чтобы сообщение об ошибке компилятора VS2010 указывало на строку кода, вызывающую сбой?не компилируется в VS2010.Я не могу использовать повышение.

Это было добавлено согласно предложению Майкла:

1>------ Build started: Project: Test, Configuration: Debug Win32 ------
1>  Test.cpp
1>c:\Test\Test.cpp(16): error C2248: 'NoCopy::NoCopy' : cannot access private member declared in class 'NoCopy'
1>          c:\Test\Test.cpp(8) : see declaration of 'NoCopy::NoCopy'
1>          c:\Test\Test.cpp(7) : see declaration of 'NoCopy'
1>          This diagnostic occurred in the compiler generated function 'AnotherClass::AnotherClass(const AnotherClass &)'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Ответы [ 2 ]

1 голос
/ 27 сентября 2010

Ошибка не отображается в правильной строке, потому что Visual Studio не знает, откуда она возникла, то есть автоматически компилируется AnotherClass(const AnotherClass&). Вы должны явно определить это, чтобы Visual Studio продолжал находить, откуда произошла ошибка.

class NoCopy {
   NoCopy( const NoCopy& );
   NoCopy& operator=( const NoCopy& );
 public:
   NoCopy(){};
};

struct AnotherClass :NoCopy
{
    AnotherClass();  // Since there is another constructor that _could_ fit,
                     // this also has to be defined
private:
    AnotherClass(const AnotherClass&);  // Define this one
};

int _tmain(int argc, _TCHAR* argv[])
{
  AnotherClass c;
  AnotherClass d = c; //<-- error is now shown here
  return 0;
}

Теперь вы получите:

1> \ main.cpp (20): ошибка C2248: «AnotherClass :: AnotherClass»: невозможно получить доступ к закрытому члену, объявленному в классе «AnotherClass»

, что относится к "правильной" строке.

0 голосов
/ 27 сентября 2010

Это единственная ошибка, которую я получаю, пытаясь скомпилировать это:

Error   1   error C2248: 'NoCopy::NoCopy' : cannot access private member declared in class 'NoCopy' main.cpp    11  1

Если вы сделаете конструктор общедоступным, он прекрасно скомпилируется (хотя, конечно, он не может соединиться из-за отсутствия реализацийэти функции-члены).

Я мог бы догадаться, что вы на самом деле имеете в виду: почему существует ошибка доступа для конструктора, а не для оператора =?Ответ в том, что вторая строка рассматривается как конструктор, а не как присваивание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...