我是C ++的新手,我很难理解如何使用继承获取我的函数。 我有一个链接到另一个继承的类,一切都工作,除了:
这是我的班级标题:Point.h(我不包括.cpp):
#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访问函数getX: 标题: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 :(得分:3)
您的定义缺少类范围,这使其成为自由函数而不是成员。
应该是
int Carre::Aire (){
return getX() * getY();
};
答案 1 :(得分:2)
在Carre的.cpp文件中,Aire和affichercar的功能是全局的。大概你打算:
int Carre::Aire(){
return (getX() * getY());
};
例如。
答案 2 :(得分:2)
在类体外声明函数需要一个类说明符:
int Carre::Aire () {
return (getX() * getY());
};
void Carre::affichercar() {
//...
}
否则
int Aire () {
return (getX() * getY());
};
只是全局命名空间中的另一个函数,可以同时存在于Carre::Aire()
。
答案 3 :(得分:1)
这是因为您没有将Aire
函数实现为Carre
类的一部分。
尝试更改
int Aire (){
到
int Carre::Aire (){
此外,您已在头文件中实现了Aire
方法。您应该在头文件或.cpp文件中实现内联函数,但不能同时实现两者。这也适用于您的affichercar
方法。