2015-11-03 98 views
0

我基本上试图从C++中的类实例化对象并使用其中一个成员函数。这感觉就像一个非常标准的问题,但我在网上找到的所有解决方案都是简单的支架问题,或者看起来很明显的范围解析问题,或者是大量复杂的例子,它们掩盖了过度复杂的实际情况。我非常感谢任何能够帮助我理解我在做什么错误的文件。使用头文件和实现文件实例化和使用C++类

我得到的错误是

未定义的参考测试::测试() '

未定义的引用)来测试:: MSG('

我有三个文件,一个main,一个Test.hpp和Test.cpp。

的main.cpp

#include "Test.hpp" 
#include <iostream> 
using namespace std; 

int main(){ 

    Test var; 
    var.msg(); 

    return 0; 
} 

Test.hpp

#ifndef TEST_HPP 
#define TEST_HPP 

class Test{ 
public: 
    Test(); 
    void msg(); 
}; 
#endif 

Test.cpp的

#include "Test.hpp" 
#include <iostream> 
using namespace std; 

Test::Test(){ 
    cout << "instantiated\n\n"; 
} 
void Test::msg(){ 
    cout << "Hello\n\n"; 
} 
+0

显然你没有编译Test.cpp,或者没有将生成的目标文件与你的程序链接起来。 – Quentin

+0

你用什么IDE?顺便说一句,不包括iostream在你的主 – KostasRim

+0

我在ubuntu中使用g ++进行编译。感谢iostream反馈btw。 –

回答

0

考虑到你使用的代码块作为IDE只是去:项目设置 - >项目编译选项 - >搜索目录 - >添加并找到.cpp和.h文件的位置。然后它会问你是否想保持这种相对路径。说不。

如果你使用一些其他的IDE它的几乎相同的进程,只是评论我,我会为你提供的步骤。

顺便说一句,没有必要在主要包括iostream,因为你已经将它包含在测试中。

+0

我实际上使用g ++作为我的编译器而不是代码块。根据使用的IDE /编译器,链接是否发生了不同?看起来这可能是我的主要问题。 –

+0

$ gcc -o输出file1.o file2.o然后就完成了。让我知道它是否有效,其中file1和file2是你的文件(改用你的文件名)。和这个$ gcc -c file1.c来获取对象文件。 – KostasRim

+0

以下链接显示了类似的方法。看起来像这个工作。对于其他人使用相同的设置进行清理。我不得不在命令中运行g ++ -o programName main.cpp file1.cpp file2.cpp,而不使用头文件。我可以得到这个编译使用g ++ http://stackoverflow.com/questions/3202136/using-g-to-compile-multiple-cpp-and-h-files –