2017-06-14 107 views
-1

我有一个单独的对象文件中声明一个类时,然后在另一个文件中的主要功能使用它的一个问题声明的类:C++的问题,在一个单独的对象文件

main.cpp中:

#include <helloclass.hpp> 


using namespace std; 

int main() { 
    Hello hi; 
    hi.hello(); 

    return 0; 
} 

helloclass.cpp:

#include <iostream> 

using namespace std; 

class Hello { 
    public: 

    void hello() { 
     cout << "Hello world\n"; 
    } 

    Hello() {} 
}; 

helloclass.hpp:

class Hello { 
    public: 

    void hello(); 


    Hello(); 
}; 

然后,我跑到下面的命令:

g++ -I. -c main.cpp 
g++ -c helloclass.cpp 
g++ -o main main.o helloclass.o 

不过,最后的命令提供了以下的输出:

main.o: In function `main': 
main.cpp:(.text+0x1f): undefined reference to `Hello::Hello()' 
main.cpp:(.text+0x2b): undefined reference to `Hello::hello()' 
collect2: error: ld returned 1 exit status 

对我来说,好像我失去了一些东西很明显的。有谁知道如何解决这一问题?

+3

您不应该尝试通过试错法在C++中进行编程。你应该去得到一个[好书](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – Rakete1111

+0

谢谢,但我已经得到了一个。 – asc11

回答

1

您不应该在单独的源文件中重新定义类别。而是包含头文件并实现Hello::hello函数(和Hello::Hello构造函数)。

+0

我已经在main.cpp的第一行中包含了头文件,并且没有在源文件中_re_define这个类。 – asc11

+0

@ asc11有问题的源文件是'helloclass.cpp'。 –

+0

好的,对不起,你是对的。我只是解决了这个问题。 – asc11

相关问题