2014-08-30 51 views
-3

我有一個關於使用#include ed文件中定義的類的簡單問題。我有三個文件,class.cc,class.h和user.cc.我試圖在文件user.cc中使用class.cc中定義的類,但出現了一個我想要理解的錯誤(不僅僅是解決方法)。如何用g ++構造另一個文件中定義的類?

以下是文件:

class.cc

class myclass { 
    public: 
    myclass() : nb(1) {}; 
    int nb; 
    int myfunc(); 
}; 

int myclass::myfunc() { 
    return 42; 
} 

class.h

class myclass { 
    public: 
    myclass(); 
    int nb; 
    int myfunc(); 
}; 

user.cc

#include <iostream> 
#include "class.h" 

int main() { 
    myclass example; 
    std::cout << example.myfunc() << "class works too."; 
} 

我要做的就是創建一個對象main.cc(main.o)和class.cc(clas s.o)和一個靜態庫class.a。然後,當我試圖將所有與鏈接:

g++ -o user user.o class.a 

我收到以下錯誤:

user.o:user.cc:(.text+0x15): undefined reference to `myclass::myclass()' 
user.o:user.cc:(.text+0x15): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `myclass::myclass()' 
collect2: error: ld returned 1 exit status 

我明白,不知怎的,用戶無法看到MyClass的構造函數定義在哪裏,但我不明白爲什麼不...

回答

1

你的class.h不應該在class.cc中重複。相反,class.cc應該在頂部做#include "class.h"。然後你只需要認識到你會錯過你的構造函數定義,所以要麼像在class.cc中那樣在class.h中內聯,要麼在class.cc中以常規方式排隊。

您不應該將一個文件複製粘貼到C或C++中。這正是#include的目的!

+0

非常感謝您的回答!我在這裏是新來的,所以我可以問你爲什麼你認爲這個問題已經被降低了? – 2014-08-30 07:32:01

+0

您的問題可能因爲缺乏興趣而缺乏基礎的C++編程。如果你是新手的c + +多少有點期待。準備好被降低很多。 – youdontneedtothankme 2014-08-30 11:48:19

相關問題