C++ 'class'类型重新定义
C++ 'class' type redefinition
我首次尝试与C 的类合作。我的Circle类和关联的标头文件正常工作,然后我移动了一些文件,然后继续遇到一个错误。
。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函数,因为我认为它们没有相关性。在我移动文件位置之前,这些文件在没有问题的情况下工作。即使将它们重命名后,我仍然有与上述相同的错误。有任何解决问题的想法吗?
问题在于,就像编译器告诉您的那样,您正在定义两倍。在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文件中定义。
您已经在标题和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...
}
您在标头文件中多次声明您的类
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;
}
删除 class CircleObje {
, public
和结尾括号};
,它应该起作用。您已经在.h中定义了类,因此无需在CPP中重新定义它。
另外,您应该像这样编写成员实现(在CPP文件中):
float CircleObje::getR() { /* your code */ }
您必须将#pragma once
放在标题文件的第一行中,然后错误将消失。
相关文章:
- 使用QJsEngine在Qt中注册自定义类型
- 在UE4中使用未定义类型'UTextBlock'
- 修改"std::set"中用户定义类型的值
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 如何使自定义类型在unordered_map中用作键
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- Qt5 远程对象 + 自定义类型,但不在 POD 中
- 为什么转换函数声明不需要至少一个定义类型说明符
- 标准::原子中的自定义类型
- 如何使用自定义类型声明Arduino数组?
- 如何在 Cython 中定义返回 cpp 定义类型的函数?
- 使用自定义访问者时具有自定义类型的提升变体失败(源自 boost::static_visitor)
- 您可以将binary_search应用于具有自定义类型的矢量吗?
- 在自定义类型图中重用 SWIG 映射
- 扩展自定义类型的spdlog
- vim使用户定义类型的COLOR与C++中的基本类型相同
- 重载自定义类型的 std::to_string 和 std::to_chars?
- 具有未声明/未定义类型的 typedef 结构
- 函数重载:内置类型与用户定义类型