2017-06-14 74 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