C ++重新定义'..'之前声明的这里错误

时间:2011-10-03 17:20:44

标签: c++ class

我已经搜索过这种类型的错误并找到了一些线程,但是每个人都建议使用#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

感谢您的帮助,如果您需要查看更多我的代码,请提出要求。

- 将会

4 个答案:

答案 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