2009-06-07 10 views
0

У меня была очень странная проблема с заголовком precompile. Линкер генерирует LNK2019: неразрешенная внешняя ошибка символа, когда я реализую метод в файле .cpp. Тем не менее, программа может быть скомпилирована, если я реализую метод в файле .h. Мне удалось найти решение, но я понятия не имею о первопричине этой ошибки.Visual C++ Связь LNK2019 Ошибка с предварительно скомпилированным заголовком

Моя структура проекта выглядит следующим образом

Solution
-> Проект 1
-> 2 проекта

Project 1 имеет 3 файлов. A.h, A.cpp и stdafx.h

file A.h 
#pragma once 
class A 
{ 
public: 
    int num; 
    A(); 

}; 

file A.cpp 
#include "stdafx.h" 
    A::A() 
     { 
      num = 2; 
     } 

file stdafx.h 
... 
#include "A.h" 
... 

В проекте 2. Я хочу использовать класс A.

файл whatever.cpp

#include "stdafx.h" 
#include "../Project1/A.h" 
... 
    A* a_obj = new A(); 
... 

В время компиляции сообщения компоновщика неразрешенный внешний символ ошибки для функции сооружения. Если я реализую конструктор в файле A.h. проект2 может быть успешно выполнен. Я хочу знать, почему нельзя поместить реализацию в файл A.cpp? Каков правильный способ организации заголовка precompile?

Спасибо

ответ

1

Проект 2 не включает в себя определение конструктора - один из способов, чтобы придать ему видимость этого будет включать определение в файле заголовка (который вы сделали).

Другой способ включить файл a.cpp в проекте 2.

Третий путь будет экспортировать класс, или конструктор с помощью DEF-файла или с помощью dllexport директивы.

Put это в файле скомпилированного заголовка:

// set up export import macros for client project use 
// define the symbol "PROJ1" before including this file in project 1 only 
// leave it undefined for other projects 
#ifdef PROJ1 
#define DLLEXP __declspec(dllexport) 
#else 
#define DLLEXP __declspec(dllimport) 
#endif 

Затем объявить класс в А заголовок:

DLLEXP class A 
{ 
    public: 
    A(); 
    ... 
}; 

Или:

class A 
{ 
    public: 
    DLLEXP A(); 
    ... 
}; 
+0

Спасибо, Второй подход хорошо работает для меня – LNK2019

 Смежные вопросы

  • Нет связанных вопросов^_^