2014-01-25 103 views
3

我一直在嘗試第一次使用C++中的類。我的圈子類和相關的頭文件工作正常,然後我移動了一些文件,從那以後不斷收到我在下面顯示的錯誤。C++'class'類型重定義

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功能我不認爲他們是相關的。在我移動文件位置之前,這些文件沒有問題。即使重命名後,我仍然有與上面相同的錯誤。任何想法來解決這個問題?

+4

我建議你[閱讀一些關於C++的書籍](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 –

+0

謝謝,我會瀏覽一下這個列表。另外,我只能接受一個,但感謝答案,他們都很有幫助。 –

回答

4

問題在於,您正在編譯器告訴您的是兩次定義類。在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文件中定義。

1

您已經在頭文件和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... 
} 
0

刪除class CircleObje {,public和th e結束括號};,它應該工作。你已經在.H中定義了你的類,因此不需要在CPP中重新定義它。

此外,你應該寫你的成員實現(CPP文件)是這樣的:

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

你在頭文件中聲明,一旦你的班級多次,另一種是重新定義你的類.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; 
}