Ошибка переопределения при добавлении проекта в качестве ссылки - PullRequest
0 голосов
/ 17 октября 2018

Я работаю на 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.

enter image description here

//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" Я больше не получаю ошибку повторного определения.

...