我可以在'h'文件内访问成员StartTest但不能访问 当它在'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 :(得分:0)
您需要在StartTest()
中声明函数test.h
。为此,请添加行
StartTest(int iArg0);
在
行下面public:
还在test.h
test.cpp
答案 1 :(得分:0)
test.h中的类aTest东西做了一件主要的事情 - 它列出了这个类中的所有成员变量和成员函数。它还可以包含实现成员函数的代码,但这不是必需的,您可以使用以下行:
void StartTest(int iArg0);
在test.h中,这将说明有一个成员函数,但它可以在其他地方找到。如果你把它放在test.h中我认为test.cpp中的StartTest()的实现就可以了。
如Jay指出的那样,在test.cpp中包含test.h。