无法访问类范围内的对象

时间:2014-02-16 22:15:06

标签: c++ .net

我可以在'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'文件中实现时,它可以正常工作。这是非常简单的代码。

2 个答案:

答案 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。