2012-04-30 4 views
0

클래스에 대한 헤더 파일을 만들고 main.cpp에 "theclassname.h"를 # 포함했지만 컴파일하려고하면 "정의되지 않은 참조"를 얻습니다 ClassName :: TheConstructor (bool, int * , std :: basic_string, std :: allocator>) ""메인 C++의 클래스 문제

내 Classname.cpp 파일 안에 "ClassName :: start"라는 함수를 생성자로 코딩했지만 어떤 이유로이 정의되지 않은 참조 문제가 발생했습니다 이 시작 함수와 내 cpp 파일에 코딩되어있는 소멸자에 대해서. 헤더 파일 내부에 코딩 된 함수에 대한 기본 호출은이 오류를 발생시키지 않지만 내 .cpp 파일에 코딩 된 함수에 대한 모든 호출은이 호출을 트리거합니다.

나는 이것에 관해 많은 게시물을 보았지만 올바른 매개 변수와 반환 형식으로 올바르게 코딩했으며 함수 이름이 헤더 파일에 정의 된 것과 동일해야합니다. 10 번 이상 확인했기 때문에 그 밖의 원인으로 뭔가를 잘못 입력하는 것일 수 있습니다.

감사

#ifndef THECLASSNAME_H 
#define THECLASSNAME_H 
#include <iostream> 

class TheClassName { 
public: 
    TheClassName(bool theBool=true, int *theArray=0, 
     std::string message="-1"); 
~TheClassName(); 
void start(); 
void setBool(bool theBool) {aBool=theBool;} 
bool getBool() {return aBool;} 
void setMessage(std::string message) {mssg=message;} 
std::string getMessage() {return mssg;} 
std::string getHello() {return hello;} 
private: 
int *anArray; 
bool aBool; 
std::string mssg; 
std::string hello; 

void aFunction1(bool); 
void aFunction2(); 
void aFunction3(); 

void aFunction4(); 
}; 

#endif 

죄송합니다 모두들 그냥 고정! 내 메이크 파일에서 나는

exec1: main.o classname.o 
    g++ -o exec1 main.o 

대신

exec1: main.o classname.o 
    g++ -o exec1 main.o classname.o 

너무 많은 너희들을 감사했다!

+4

코드를 설명하기보다는 코드 (또는 적어도 코드의 단순화 된 대표 버전)를 게시해야합니다. –

+0

.cpp 파일이 프로젝트의 일부가 아닌 것처럼 들립니다. 프로젝트에 추가하면 컴파일러와 링커에서 함수 정의를 찾습니다. – tmpearce

+0

이전 질문을 수정/편집해야한다고 생각합니다. (http://stackoverflow.com/questions/10386144/constructor-parameter-issue-c) –

답변

2

링커 단계에서 오류가 발생하는 것 같습니다. 또한 헤더 파일을 포함하지 않고 C++ 클래스 정의가있는 파일을 컴파일하고 있습니까? 함수 정의가있는 별도의 C++ 파일이 있어야하며이 파일도 컴파일하고 링커 명령 행에 오브젝트 파일을 포함 시켜서 최종 실행 파일을 링크 할 때 정의되지 않은 참조 오류가 발생하지 않도록해야합니다.

+0

기술적으로 별도의 파일은 필요하지 않지만 반드시 사용해야합니다. – chris

+0

참. 나는 좋은 습관을 심어 주려고 노력했다. :) –

+0

내 makefile에 – JDN

1

가능한 경우 코드를 게시하고 빌드 명령과 출력을 게시하십시오.

이것은 컴파일 문제가 아닌 링키지이며 생성자를 포함하는 컴파일 단위와 소멸자 선언이 실행 파일에 링크되어 있지 않은 것처럼 들립니다. 즉 링커가 함수를 찾을 수 없습니다.