Я работаю на VS2015.У меня есть проект C ++ A
, в котором есть несколько файлов и MyClass.h
.Он построен с флагом /clr
.У меня есть другой консольный проект C ++ B
, который также собран с флагом /clr
.B
имеет B.cpp
со следующим содержимым:
//B.cpp
#include "MyClass.h"
void main()
{
MyClass* obj = new MyClass();
}
Я успешно могу построить проект B
.Но когда я добавляю проект A
как ссылку (щелкните правой кнопкой мыши -> Добавить ссылку) к проекту B
, я неожиданно получаю redefinition error
класса, определенного в файле в проекте A
.
Как добавление ссылки может вызвать такую ошибку?
UPDATE1
Все заголовочные файлы имеют "header guard".
UPDATE2
Я думал, ProjectA
- консоль, а ProjectB
- статическая библиотека.Но было уже поздно, и я не заметил, что я создал ProjectA
и ProjectB
в качестве консольных приложений.
Я знаю, что мне нужно экспортировать MyClass, если ProjectB
- это dll, чтобы я мог использовать его в ProjectA
.Пример может быть глупым, но так как я получил это по ошибке, я все еще хочу понять, почему я получаю ошибку повторного определения в этом случае.Я загрузил тест в здесь .
ProjectA
имеет ссылку на ProjectB
.
//ProjectA.cpp
#include "MyHeader.h"
int main()
{
return 0;
}
//ProjectB.cpp
#include "MyHeader.h"
//MyHeader.h
#pragma once
public enum class MyClass : int
{
};
Если я удалю ссылку на ProjectB
или закомментирую #include "MyHeader.h"
Я больше не получаю ошибку повторного определения.