2011-04-22 10 views
1

나는 오류 얻고있다 : "정의되지 않은 참조 'yClass :: yClass을()'링커 오류가 발생하는 이유는 무엇입니까?

헤더를 누구나 이유를 알고 주요 클래스의 인스턴스를 생성 할 때?.를

주요
#ifndef header_h 
#define header_h 

#include <cstdlib> 
#include <iostream> 
using namespace std; 

class yClass 
{ 
     public: 
      void one(); 
      void two(int,int); 
      yClass(); 

     private: 
       int a; 
       int b; 
}; 

#endif 

:

#include "header.h" 

int main() 
{ 
    yClass a; 

    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 
+0

header.h의 형식은 무엇입니까? – rzetterberg

답변

8

yClass의 생성자를 선언했지만 정의하지 않았습니다. 또는 다른 파일 (예 : "header.h"에 해당하는 .cpp 파일)에이 파일을 정의한 경우 해당 파일과 연결되지 않은 것입니다.

생성자는 main의 객체가 초기화 될 때 사용되므로 해당 정의가 있어야합니다. 대조적으로 "one"및 "two"메소드는 호출되지 않으므로 이들에 대한 정의는 실제로 필요하지 않습니다.

생성자를 정의하지 않을 데 대한 간단한 수정 클래스 정의를 정의하는 것입니다 : 문제가 생성자를 정의하지만, 정의와 연결되지 않은 경우

struct yClass { 
    yClass() : a(), b() {} 

private: 
    int a, b; 
}; 

, 당신은 추가해야

1

생성자 (및 yClass의 다른 함수)를 선언했지만 구현하지 않았기 때문에 다른 번역 단위 (".cpp 파일")를 makefile, 프로젝트, 명령 줄 등에 추가 할 수 있습니다.

0

실제로 yClass를 어떻게 정의 했습니까?
#include "yclass.cpp
또는 yclass가 포함 된 라이브러리의 링크가 아니라면 헤더 만 있으면 충분하지 않습니다.

+2

".cpp"파일을 # 포함하지 마십시오. –

관련 문제