2015-01-09 55 views
1

我正在寫一個簡單的類,並得到一些錯誤。頭文件如下所示:傳遞字符串通過引用錯誤C++

和下面的方法文件顯示:

// temp.cpp 

#include "temp.h" 
#include <string> 
using namespace std; 

GameEntry::GameEntry(const string &n, int s):name(n),score(s) {} 

string GameEntry::getName() { return name; } 

int GameEntry::getScore() { return score; } 

主要文件如下所示:

#include <iostream> 
#include <string> 
#include "temp.h" 
using namespace std; 

int main() { 
    string str1 = "Kenny"; 
    int k = 10; 
    GameEntry G1(str1,k); 

    return 0; 
} 

我有錯誤是這樣的:

Undefined symbols for architecture x86_64: 
    "GameEntry::GameEntry(std::__1::basic_string<char, std::__1::char_traits<char>, 
         std::__1::allocator<char> > const&, int)", referenced from: 
     _main in main1-272965.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Can anyon告訴我什麼是錯的?非常感謝。

+0

你是如何調用編譯器和鏈接器的?似乎你忘了與'temp.o'鏈接。 – 5gon12eder 2015-01-09 22:25:44

+0

你是如何編譯的?什麼是命令行? – joelmeans 2015-01-09 22:26:11

+0

我只是簡單地嘗試「C++ main.cpp」,它通常適用於我。 – Kenny 2015-01-09 22:29:51

回答

1

除了使用默認參數修正問題,如clcto和G.薩馬拉斯指出,你需要編譯temp.cpp到目標文件(temp.o),並與main.cpp聯繫起來。試試這個:

g++ -c temp.cpp

g++ main.cpp temp.o

如果您沒有明確編譯temp.cpp,那麼在目標文件中找不到要刪除的符號。我想你可能誤解了過去的工作。

+0

感謝您的所有建議。至於最後一句話,儘管我不擅長編譯器,但這不太可能。請介意測試這個小代碼。我記得它通過「C++ main.cpp」工作。 (在「http://www.rsmas.miami.edu/personal/wenliang.zhao/Software.htm」下載「sudoku.zip」 – Kenny 2015-01-09 22:55:04

+0

@Kenny沒問題,希望你能解決這個問題 – joelmeans 2015-01-09 22:55:55

+0

我肯定會贊成你的先生如果我沒有達到票數的每日上限,那很好! – gsamaras 2015-01-09 23:05:05

2

你不能把默認參數的定義:

GameEntry::GameEntry(const string &n, int s):name(n),score(s) {} 

編輯:其實你可以把它定義,但你不能把它的定義和聲明都。在此問題中可以找到更多信息:Where to put default parameter value in C++?

+0

你的意思是在類文件中?我拿出了默認值,但錯誤仍然存​​在。 – Kenny 2015-01-09 22:28:53

+0

在定義中,在'.cpp'文件中。 – clcto 2015-01-09 22:29:34

+0

你可以修改頭文件,你很好。 @Kenny – gsamaras 2015-01-09 22:30:06

1

在.h和.cpp文件中都不能有默認值。

在頭文件中的原型改成這樣:

GameEntry(const string &n, int s); 

,你去好。

在main.cpp中,你在這裏錯過了一個分號:int k = 10


一個有趣的鏈接:Where to put default parameter value in C++?

長話短說,它給你。

如果它在頭文件中,它有助於文檔,如果它在源文件中,它實際上幫助閱讀代碼的讀者不會使用它。