C++“class”类型重定义

j7dteeu8  于 2023-02-26  发布在  其他
关注(0)|答案(5)|浏览(174)

我第一次尝试使用C++中的类。我的循环类和相关的头文件工作得很好,然后我移动了一些文件,从那以后一直得到一个错误,我在下面显示。

c:\circleobje.cpp(3): error C2011: 'CircleObje' : 'class' type redefinition

c:\circleobje.h(4) : see declaration of 'CircleObje'

CircleObje.h

#ifndef CircleObje_H
#define CircleObje_H
class CircleObje
{
public:
void setCol(float r, float g, float b);
void setCoord(int x, int y);
float getR();
float getG();
float getB();
int getX();
int getY();
};

#endif

CircleObje.cpp

#include "CircleObje.h"

class CircleObje {

float rVal, gVal, bVal;
int xCor, yCor;

public:

void setCol(float r, float g, float b)
{
    rVal = r;
    gVal = g;
    bVal = b;
}

void setCoord(int x, int y)
{
    xCor = x;
    yCor = y;
}

...
};

我没有复制所有的.cpp函数,因为我不认为它们是相关的。这些文件在我移动文件位置之前工作没有问题。即使重命名后,我仍然有如上所述的相同错误。有什么想法来解决这个问题吗?

iyfjxgzm

iyfjxgzm1#

问题在于,正如编译器告诉你的那样,你定义了这个类两次,在cpp中,你应该像这样提供函数的定义:

MyClass::MyClass() {
  //my constructor
}

void MyClass::foo() {
   //foos implementation
}

因此,cpp应该如下所示:

void CirleObje::setCol(float r, float g, float b)
{
    rVal = r;
    gVal = g;
    bVal = b;
}

void CircleObje::setCoord(int x, int y)
{
    xCor = x;
    yCor = y;
}

...

所有的类变量都应该在类的.h文件中定义。

xriantvc

xriantvc2#

你已经定义了这个类两次,在头文件和cpp中,所以在.cpp中编译器会看到两个定义,删除. cpp中的类定义。
类函数应该以这种方式在cpp中实现:

<return_type> <class_name>::<function_name>(<function_parameters>)
{
    ...
}

考虑以下示例类:

//foo.hpp

struct foo
{
    int a;

    void f();
}

该类在foo.cpp文件中实现:

#include "foo.hpp"

void foo::f()
{
    //Do something...
}
bqucvtff

bqucvtff3#

你正在声明你的类多次一次在头文件和另一次在.cpp文件,这是重新定义你的类。

CircleObje.h

#ifndef CircleObje_H
#define CircleObje_H
class CircleObje
{
public:
void setCol(float r, float g, float b);
void setCoord(int x, int y);
float getR();
float getG();
float getB();
int getX();
int getY();
public:
float rVal, gVal, bVal;
int xCor, yCor;


};

#endif


CircleObje.cpp

#include "CircleObje.h"


void CircleObje::void setCol(float r, float g, float b)
{
    rVal = r;
    gVal = g;
    bVal = b;
}

void CircleObje::setCoord(int x, int y)
{
    xCor = x;
    yCor = y;
}
anhgbhbe

anhgbhbe4#

删除class CircleObje {public和结束括号};,它应该可以工作。您已经在.H中定义了类,因此不需要在CPP中重新定义它。
另外,你应该这样写你的成员实现(在CPP文件中):

float CircleObje::getR() { /* your code */ }
tct7dpnv

tct7dpnv5#

你需要把#pragma一次在头文件的第一行然后错误将消失

相关问题