我已经搜索过这种类型的错误并找到了一些线程,但是每个人都建议使用#ifndef来确保头文件只加载一次。我这样做了,但仍然出错。奇怪的是这个错误: circle.cc:25:6:错误:'void circle :: populate_classobj(int,int,int)'的原型与类'circle'中的任何一个都不匹配 说我的函数只有3个int,但每个地方我都有这个函数,我有4个整数。
这是我的类头文件
#ifndef _CIRCLE_H_
#define _CIRCLE_H_
#define PI 3.14159
class circle
{
public:
float radius(int x1, int x2, int y1, int y2);
float circumference(float d);
float area(float d);
void populate_classobj(int, int, int, int);
protected:
float distance(int x1, int x2, int y1, int y2);
private:
int x1, y1, x2, y2;
};
#endif // _CIRCLE_H_
这是我的班级文件circle.cc中的函数调用
void circle::populate_classobj(int cx1, int cx2, int cy1, int cy1)
{
x1=cx1;
x2=cx2;
y1=cy1;
y2=cy2;
}
这是我实际上在主要
中所称的内容mycircle.populate_classobj(x1,x2,y1,y2);
主要
中有变量x1,x2,y1,y2真正奇怪的是重新定义错误仅适用于cy1,而不是cx1,cx2或cy2
感谢您的帮助,如果您需要查看更多我的代码,请提出要求。
- 将会
答案 0 :(得分:4)
最后两个参数完全相同,如下所示。因此重新定义错误。
void circle::populate_classobj(int cx1, int cx2, int cy1, int cy1)
^^^ ^^^
我想你想写:
void circle::populate_classobj(int cx1, int cx2, int cy1, int cy2)
答案 1 :(得分:3)
void circle::populate_classobj(int cx1, int cx2, int cy1, int cy1)
你看到cy1
的重新定义,因为两个最后的参数都被称为相同。顺便说一句,在全局命名空间中以下划线开头的名称是为实现保留的,你应该从范围保护中删除前导下划线。
答案 2 :(得分:3)
void circle::populate_classobj(int cx1, int cx2, int cy1, int cy1)
// ^^^ ^^^
这是一个问题拼写错误,还是在名为cy1
的函数定义中确实有两个参数?
答案 3 :(得分:1)
您对populate_classobj
的定义对两个不同的参数使用相同的名称cy1
。