从.cpp文件定义标签(在标题中)

时间:2017-07-06 00:28:54

标签: c++ visual-c++ c++-cli visual-studio-community

我尝试在头文件之外定义标签时遇到一些问题。我三天前才开始尝试学习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 ^)'已经有一个身体"

正如我所说,如果这是一个明显的错误,我很抱歉,但我无法理解这个可爱的错误。如果除了身体错误之外还有某些东西(我知道有)错误,请告诉我。要解决这个问题。

感谢无论谁回复: - )

1 个答案:

答案 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条件只满足一次。