2015-01-09 2 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 뭐가 잘못 됐는지 말해줘? 많은 감사합니다.

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

편집 : 사실 당신이 정의에 넣을 수 있지만 정의와 선언 모두에 넣을 수 없습니다

+0

어떻게 컴파일러와 링커를 호출 했습니까? 'temp.o '와의 링크를 잊어 버린 것 같습니다. – 5gon12eder

+0

어떻게 컴파일하고 있습니까? 명령 줄이란 무엇입니까? – joelmeans

+0

난 그냥 "C++ main.cpp"시도하고 일반적으로 나를 위해 작동합니다. – Kenny

답변

1

clcto 및 G. 사마라스에 의해 지적, 기본 매개 변수를 사용하여 문제를 수정하는 것 외에도, 당신은 객체 파일 (temp.o)에 temp.cpp를 컴파일하고 main.cpp로 연결해야합니다. 이 시도 :

g++ -c temp.cpp

g++ main.cpp temp.o합니다.

누락 된 기호는 명시 적으로 temp.cpp을 컴파일하지 않으면 작성하지 않는 개체 파일에서 찾을 수 있습니다. 나는 당신이 아마 과거에 일한 것을 오도 남기고 있다고 생각합니다.

+0

모든 제안에 감사드립니다. 마지막 문장은 컴파일러에 익숙하지 않지만 그렇다고 볼 수는 없습니다. 이 작은 코드를 테스트하는 것이 좋습니다. 나는 그것이 "C++ main.cpp"에 의해 작동하는 것을 기억합니다. ("sudoku.zip"을 "http://www.rsmas.miami.edu/personal/wenliang.zhao/Software.htm"에서 다운로드하십시오. – Kenny

+0

@ 케니 문제 없습니다. 희망을 가지고 일하게되기를 바랍니다. – joelmeans

+0

나는 분명히 당신을 상대로 줄 것입니다. 만약 내가 투표의 일일 한도에 도달하지 않았다면 좋았어! – gsamaras

2

당신은 정의의 기본 매개 변수를 넣을 수 없습니다. 자세한 내용은이 질문에서 찾을 수 있습니다. Where to put default parameter value in C++?

+0

클래스 파일을 의미합니까? 기본값을 가져 왔지만 오류는 여전히 있습니다. – Kenny

+0

정의에서,'.cpp' 파일에. – clcto

+0

헤더 파일을 수정하면됩니다. @Kenny – gsamaras

1

.h 및 .cpp 파일에 기본값을 둘 수는 없습니다.

이에 헤더 파일의 프로토 타입을 변경

:

GameEntry(const string &n, int s); 

당신은 좋은 이동합니다.

는 MAIN.CPP, 당신은 여기에 세미콜론을 놓친 : int k = 10


흥미로운 링크 : Where to put default parameter value in C++?

길고도 짧은 이야기, 그것은 당신에게 달려있다.

헤더 파일에있는 경우 문서화에 도움이됩니다. 파일의 소스에있는 경우 파일을 읽는 사용자가 실제로 코드를 읽는 데 도움이되며 실제로 사용하지는 않습니다.

관련 문제