не может получить доступ к объекту в области видимости класса

0

Я могу получить доступ к элементу StartTest, когда он находится внутри файла "h", но не когда он находится внутри файла "cpp". В cpp я получаю ошибки Lnk.

// Form1.h
// class outside of generated namespace problem
// this was created using VS 2012 C++ wizard
namespace w32t {
public ref class Form1 : public System::Windows::Forms::Form {
  O O O // generated stuff left out
 #include "stdafx.h"
 #include "aTest.h"

 private: System::Void Test_OnClick(System::Object^  sender, System::EventArgs^  e) 
 {
      aTest* objTest = new aTest();         // create aTest pointer
  this->InternalRoutine(objTest);
  }
  void InternalRoutine(aTest* objExt)
  {
      aTest* objX = objExt;         // copy aTest pointer
      objX->StartTest(123);         // call to aTest::StartTest
  }                                 // works inside aTest.h
 }; // end class Form1              // NOT inside aTest.cpp
}  // end namespace w32t

//test.h
class aTest{
public:
int iTest;

aTest()
{ 
    iTest = 0;
};
~aTest(){};
/*  void StartTest(int iArg0)       // when this is part
    {                               // of the build, the
        iTest = iArg0;              // call from Internal using
    }                               // objX->StartText(123);
*/                                  // works.
};

// test.cpp                         // when "StartTest" is commented
#include "stdafx.h"                 // out in the class and this is
#include "testHeader.h"             // included the app will not build  
void aTest::StartTest(int iArg0)    // !!this will not link!!
{                                   // error LNK2028: unresolved token
    iTest = iArg0;                  // error LNK2019: unresolved external symbol
}

Файл cpp вызывает ошибку ссылки, когда элемент StartTest определяется внутри. Когда элемент комментируется и реализуется внутри файла "h", он работает нормально. Это очень простой код, который должен работать.

  • 0
    Это VS 2012 form.h с одной кнопкой; инициализация класса в файле 'h'; затем вызов члена в файле "cpp". Член в файле cpp генерирует страх LNK2028-LNK2019.
  • 0
    Когда член cpp помещается в файл h, код компилируется и связывается правильно. В приведенном выше листинге я забыл показать прототип члена, но он есть в моем тесте.
Теги:

2 ответа

0

Класс aTest stuff в test.h делает одно главное - он перечисляет все переменные-члены и функции-члены внутри этого класса. Он также может содержать код, который реализует функции-члены, но это необязательно, вы можете иметь строку:

void StartTest(int iArg0);

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

И включите test.h в test.cpp, как указывает Джей.

  • 0
    Извините за путаницу в описании. У меня был прототип, и он все равно не будет работать правильно, когда член находится в файле cpp.
  • 0
    Хорошо, я понимаю, поэтому у вас есть чистая пара файлов один .h, а другой .cpp. Тогда единственное, о чем я могу думать, это то, что ваша стадия компоновки не включает test.obj (или test.o в зависимости). В качестве первого эксперимента я хотел бы внести преднамеренную ошибку в test.cpp, чтобы доказать себе, что он даже компилируется.
Показать ещё 5 комментариев
0

Вам нужно объявить функцию StartTest() в test.h Для этого добавьте строку

StartTest(int iArg0);

под линией

public:

Также test.h в test.cpp

  • 0
    Я забыл вернуть прототип обратно в этот список. Добавление прототипа не помогает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню