我尝试在头文件之外定义标签时遇到一些问题。我三天前才开始尝试学习C ++,所以我可能在这里做了一个非常明显的错误,我没有注意到。到目前为止,我还没有设法让它发挥作用。
我想在MIDCSrc.cpp中定义文本,而标签的声明在MIDC.h中。到目前为止,我在MIDC.h中所做的是:
*MIDC.h*
#include "MIDCSrc.cpp"
*VS Auto-generated code*
private: System::Windows::Forms::Label^ label1;
*VS Auto-generated code*
private: System::Void label1_Click(System::Object^ sender, System::EventArgs^ e)
{
textfunc2(label1);
}
在MIDCSrc.cpp中是:
#include "MIDC.h"
namespace MIDC
{
void textfunc2(System::Windows::Forms::Label^ aLabel)
{
aLabel->Text = "Wow!";
}
}
(我使用的是Visual Studio 2017社区)
问题是,我甚至无法测试它看到它失败,因为它给了我一个"错误C2084函数' void MIDC :: textfunc2(System :: Windows :: Forms :: Label ^)'已经有一个身体"
正如我所说,如果这是一个明显的错误,我很抱歉,但我无法理解这个可爱的错误。如果除了身体错误之外还有某些东西(我知道有)错误,请告诉我。要解决这个问题。
感谢无论谁回复: - )
答案 0 :(得分:0)
尝试user4581301提到的建议:“标题保护”。这可以防止递归包含文件。这很容易:
#ifndef _MIDC_H
#define _MIDC_H
// here go the contents of MIDC.h
#endif
在您的CPP文件中执行相同的操作:
#ifndef _MIDCSRC_CPP
#define _MIDCSRC_CPP
// here goe the contents of MIDCSrc.cpp
#endif
#define'd符号的选择是任意的。我在这里选择的名字只是常见的做法。诀窍是只有在未定义此符号时才包含文件的内容 - 这是默认情况。 #ifndef主体的第一步是#define它,所以#ifndef条件只满足一次。