2014-04-17 2 views
1

C++의 새로운 기능과 상속 기능을 사용하는 방법을 이해하는 데 어려움이 있습니다. 상속을 가진 다른 클래스에 링크 된 클래스가 있습니다. 예외는 모두 다음과 같습니다.C++ 상속 함수를 찾을 수 없습니다.

수퍼 클래스 함수에 연결할 수 없습니다.

여기 내 클래스 헤더입니다 : 이제 Point.h에서 기능 getX에 액세스하려고 내 다른 클래스

#ifndef Point_H 
#define Point_H 
#include <iostream> 
class Point{ 
    public: 
     Point(); 
     void set_values (int , int); 
     void set_values (int , int , int); 
     void affichervaleurs(); 
     int getX() const { return x; } 
     int getY() const { return y; } 
    private: 
     int x ; 
     int y ; 
     int z ; 
    }; 
#endif 

: 헤더를 Point.h가 (필자는 .CPP 포함되지 않습니다) Carre.h

#ifndef Carre_H 
#define Carre_H 
#include "Point.h" 

class Carre : public Point{  
    public: 
     Carre(); 
     //Carre(int a , int b); 
     //Carre(int a, int b):Point(a,b) {}; 
     //Carre(int a, int b, int c):Point(a, b, c) {}; 
     //const Point &pp; 
     int Aire(){ 
     }; 
     void affichercar(){ 
         }; 

    }; 
#endif 

Carre.cpp는

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

Carre::Carre():Point(){ 
    }; 
     //Carre::Carre(int a, int b); 
     //const &pp; 
     int Aire(){ 
       return (getX() * getY()); 
     }; 
     void affichercar(){ 
     //cout << "Coordonnees X:" << x << endl; 
         }; 

그것은 내 GetX()가 선언되지 않은 것을 말한다 내 Carre.cpp. 내가 C++에서 새롭다고 말했듯이 누군가 코드를 작성하기 위해 누락 된 부분을 알고 있습니까? ?

+0

스택 오버플로에서 영어 이름 (식별자, 주석, 메시지, 코드 등)을 사용하십시오. –

+1

@BasileStarynkevitch 그들은 단지 이름 일뿐입니다. 질문은 완벽하게 이해됩니다. – tadman

+0

int Aire() 앞에 완전한 한정자가 필요합니다. –

답변

3

귀하의 정의에 클래스 범위가 누락되어 회원이 아닌 무료 기능이됩니다.

그것은 CARRE에 대한 .cpp 파일에서

int Carre::Aire(){ 
    return getX() * getY(); 
}; 
+0

그렇지 않으면 클래스와 관련이없는 독립 함수를 선언합니다. – tadman

2

을해야한다, 기능 에르와 affichercar 글로벌 있습니다. 예상 한대로 :

int Carre::Aire(){ 
      return (getX() * getY()); 
    }; 

예를 들어. 함수 외부 클래스 본문을 선언

2

클래스 지정자를 필요

int Carre::Aire() { 
    return (getX() * getY()); 
}; 

void Carre::affichercar() { 
    //... 
} 

그렇지 않으면

int Aire() { 
    return (getX() * getY()); 
}; 

수는 Carre::Aire()에 동시 가능 존재 글로벌 네임 스페이스의 또 다른 기능입니다.

1

Aire 함수를 Carre 클래스의 일부로 구현하지 않았기 때문입니다.

한번에 변경

int Aire(){ 

또한

int Carre::Aire(){ 

에, 당신은 이미 헤더 파일의 Aire 메소드의 구현이있다. 헤더 파일이나 .cpp 파일에서 함수를 인라인해야하지만 둘 다 구현해서는 안됩니다. 이는 affichercar 메소드에도 적용됩니다.

관련 문제