Я могу получить доступ к элементу 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", он работает нормально. Это очень простой код, который должен работать.
Класс aTest stuff в test.h делает одно главное - он перечисляет все переменные-члены и функции-члены внутри этого класса. Он также может содержать код, который реализует функции-члены, но это необязательно, вы можете иметь строку:
void StartTest(int iArg0);
внутри test.h, и это будет указывать, что существует такая функция-член, но ее можно найти в другом месте. Если вы поместите это в test.h, я думаю, что реализация StartTest() в test.cpp будет в порядке.
И включите test.h в test.cpp, как указывает Джей.
Вам нужно объявить функцию StartTest()
в test.h
Для этого добавьте строку
StartTest(int iArg0);
под линией
public:
Также test.h
в test.cpp