Определение метки (в заголовке) из файла .cpp

У меня небольшая проблема с попыткой определить метку за пределами файла заголовка. Я начал пытаться изучать 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 ^)’ уже имеет тело»

Как я уже сказал, мне жаль, если это очевидная ошибка, но я не могу понять эту прекрасную ошибку. Если что-то (и я знаю, что есть) не так с кодом, кроме ошибки тела, если возможно, сообщите мне. Должен исправить это.

Спасибо всем, кто отвечает 🙂

-3

Решение

Попробуйте предложение, упомянутое пользователем 4581301: «Защита заголовка». Это предотвращает рекурсивное включение файлов. Это довольно просто:

#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 выполняется только один раз.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]