C++类重新定义错误-我无法理解我的生活
C++ Class redefinition error - I cannot figure this out for the life in me
关于我为什么要获得'C2011 'Transaction':'class' type redefinition
有什么帮助吗?我确信这是显而易见的,但我一辈子都无法弄清楚。请帮忙。
transaction.h
#include <string>
class Transaction
{
private:
int amount;
std::string type;
public:
Transaction(int amt, std::string kind);
std::string Report();
};
transaction.cpp
#include "transaction.h"
using namespace std;
Transaction::Transaction(int amt, std::string kind):amount(amt), type(kind)
{
}
string Transaction::Report()
{
string report;
report += " ";
report += type;
report += " ";
report += to_string(amount);
return report;
}
您可以在头文件中使用头保护,这将确保您永远不会在任何其他cpp文件中多次定义类或结构等。
要添加标头保护,您可以简单地执行以下操作:
#ifndef TRANSACTION_H
#define TRANSACTION_H
// your header file
#endif
或者简单地添加
#pragma once
所有的头文件,你很好。
您需要在transaction.h
:中使用include guards
#if !defined(your_symbol)
#define your_symbol 1
/*ToDo - code here*/
#endif
其中,your_symbol
通常是对文件名的修饰。注意不要使用前导双下划线或单前导下划线后跟大写字母,因为它们是保留符号。
这样可以防止类声明在任何编译单元中被多次包含。
您可以使用#ifndef your_symbol
来代替我的第一行,并从第二行删除1,甚至可以在文件顶部使用#pragma once
指令,但我提供的版本适用于我遇到的每一个编译器。
在标题中尝试以下操作:
#ifndef TRANSACTION //If transaction has never been defined before
#define TRANSACTION //Define transaction
//Content of your header
#endif
这个头球后卫可能会帮助你。事实上,这将防止您的标头被多次包含,从而导致重新定义。如果你只包括一次你的头球,你就不需要这些后卫,但无论如何,有他们也没什么坏处。
或者,您可以在页眉的开头使用#pragma once
。
如果你想了解更多关于它们的信息,请查看维基百科
相关文章:
- 我的字符计数代码计算错误.为什么
- C++,我收到一个无法理解的编译器错误
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 当使用带有VS2019或VSCode的虚幻引擎4.24.2时,我如何修复这些错误的Intellisense错误
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 发出给我的理解错误消息(启动C++/编程)
- 无法在代码厨师七月挑战中找到我的逻辑错误
- 我如何理解我的Valgrind错误消息
- 我的代码错误类型警告 1 警告 C4018 和更多错误
- 当我使用的教程完全没有错误时,为什么我的代码错误
- C++ 未读取我的 % 运算符(错误:"运算符%"不匹配)
- 当我用口音保存JSON时,我的文字错误(QT)
- 将十进制转换为十六进制,找不到我的逻辑错误
- C++类重新定义错误-我无法理解我的生活
- 这是Visual Studio 2013更新4 c++优化器错误还是我的代码错误?
- 我需要帮助来定位我的 malloc 错误
- 对于我的生活,我无法比较这个数组的第一个字符