2014-06-18 2 views
2

C++에서는 소스 코드 파일과 해당 헤더 파일을 연결할 수 없습니다. 나는 같은 폴더/디렉토리에 두 파일을 유지하고있다. 또한 헤더 파일을 가져 오는 다른 클래스를 사용하고 있는데 응용 프로그램의 시작 지점이지만 컴파일 할 때 다음 오류 메시지가 표시됩니다.C++에서 코드를 연결하는 중 오류가 발생했습니다.

C : \ Users \ SONY-V ~ 1 \ AppData \ . ccetXYNN.o Marksheet_Test.cpp \ 로컬 \ 온도 :(텍스트 + 따라 0x74) : Marksheet :: Marksheet (표준 : : 문자열, 표준 : : 문자열) '

C'에 정의되지 않은 참조 : 사용자는 SONY를 \ \ . 텍스트 + 0xa9) :(ccetXYNN.o Marksheet_Test.cpp \ -V ~ 1 개 \의 AppData \ 로컬 \ 온도 : Marksheet`에 정의되지 않은 참조 : dispmessage() '

E : \ 교육 \ DEV-CPP의 \ mingw32 \ min gw32 \ 빈 \의 ld.exe의 C : \ 사용자 \ SONY는-V ~ 1 \의 AppData \ 로컬 \ 임시 \의 ccetXYNN.o : 섹션 에 나쁜 RELOC 주소 0x13의`는 .text $ _ZN9MarksheetD1Ev [__ ZN9MarksheetD1Ev] '

전자 : \ 교육 \ dev에-CPP \ mingw32 \ mingw32 빈 \의 ld.exe 마지막 링크 실패 : \ 작동 불가

E : \ 교육 \ C++ 프로그래밍 \의 collect2.exe [오류] LD가 반환 한 종료 상태

여기 Marksheet은 헤더를 만드는 cpp 파일이며 Marksheet_Test은 응용 프로그램의 시작점입니다.

누군가이 문제를 해결할 수 있습니까? 다음과 같이

코드는 다음과 같습니다 이

#include<iostream> 
#include "Marksheet.h" 
using namespace std; 
class Marksheet{ 
Marksheet::Marksheet(string cname,string instname){ 

    setCoursename(cname); 
    setinstname(instname); 
} 
void Marksheet::setCoursename(string cname) 
{ 
    coursename=cname; 

} 
void Marksheet::setinstname(string insname){ 
    instname=insname; 
} 
string Marksheet::getCoursename() 
{ 
    return coursename; 
} 
string Marksheet::getinstname() 
{ 
    return instname; 
} 
void Marksheet::dispmessage() 
{ 
    cout<<"Welcome to the "<<coursename<<"\n"; 
    cout<<"This course is offered by Prof."<<instname<<endl; 
} 
}; 

다음 코드는 Marksheet.h 헤더 파일입니다 Marksheet.cpp입니다 코드에 따라 Marksheet_Test

#include "Marksheet.h" 
using namespace std; 
int main() 
{ 
    Marksheet obj1("Pransanjeet Majumder","IT 114 Objject Oriented programming"); 
    obj1.dispmessage(); 
} 

에 대한 코드입니다

#include<string> 
using namespace std; 
class Marksheet 
{ 
public: 
    Marksheet(string,string); 
    void setCoursename(string); 
    string getCoursename(); 
    void dispmessage(); 
    void setinstname(string); 
    string getinstname(); 

private: 
    string coursename; 
    string instname;   
}; 

코드를 컴파일하는 데 DEVC++ 컴파일러를 사용하고 있습니다.

+1

Marksheet_Test.cpp를 표시하십시오. 필요한 모든 파일을 #include 했습니까? – Ilya

+2

코드는 어디에 있습니까? 너는 어떻게 꾸미고 있니? – cppcoder

답변

4

불필요한 구현 주위에 class Marksheet이 있습니다. 변경 Marksheet.cpp는에 : 정의 파일에는 class 없다

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

Marksheet::Marksheet(string cname,string instname) { 
    setCoursename(cname); 
    setinstname(instname); 
} 

void Marksheet::setCoursename(string cname) { 
    coursename=cname; 
} 

void Marksheet::setinstname(string insname) { 
    instname=insname; 
} 

string Marksheet::getCoursename() { 
    return coursename; 
} 

string Marksheet::getinstname() { 
    return instname; 
} 

void Marksheet::dispmessage() { 
    cout<<"Welcome to the "<<coursename<<"\n"; 
    cout<<"This course is offered by Prof."<<instname<<endl; 
} 

하는 것으로. 당신이 다음 Marksheet라는 새로운 클래스를 선언 한 일을하고 있었다 무엇

은 그들을 선언하지 않고 자신의 회원입니다 define을 시도했다. 또한 헤더 파일에 using 선언을 넣지 않아야합니다. 따라서 헤더 파일을 포함하는 모든 클래스는 동일한 선언을 사용해야합니다. 이로 인해 컴파일 타임에 충돌을 찾기가 어려울 수 있습니다.

+0

제안 된 변경 사항을 수행했지만 여전히 동일한 오류가 발생했습니다 – Prerak

+0

http : // stackoverflow를 보셨습니까?com/questions/12573816/정의되지 않은 참조 - 확인되지 않은 - 외부 기호 오류 및 수정 방법 'Include path'에'Marksheet.h'를 가지고 있습니까? – Dennis

관련 문제