1. ホーム
  2. c++

[解決済み】C++の「クラス」型の再定義

2022-02-15 02:47:22

質問

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の関数は関係ないと思ったので、すべてコピーしていません。これらのファイルは、ファイルの場所を移動する前は問題なく動作していました。ファイル名を変更しても、上記と同じエラーが発生します。この問題を解決するためのアイデアはありますか?

解決方法

問題は、コンパイラの指示通り、クラスを2回定義していることです。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 ファイルで定義する必要があります。