我有一个非常奇怪的问题与预编译头。连接产生LNK2019:尚未解决的外在象征的错误,当我实施的方法。cpp文件。然而,该程序可以汇编,如果我实现的方法。h文件。我正要找出一个解决方案,但我没有想法的根源这一错误。

我的项目的结构看起来是这样

解决方案
->项目1
->项目2

项目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.我想要使用的一类。

文件whatever.cpp

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

在汇编时,连接的报告尚未解决的外部符号错误的一个建设功能。如果我实现的constructor in A.h文件。该项目2可能是成功的遵守。我想知道,为什么不能把执行中A.cpp 文件?什么是正确的方式组织预编译头?

谢谢你

有帮助吗?

解决方案

项目2不包括定义的一个构造一的方式给它的可见性,这是对的定义包括在该标题的文件(这你有没有).

另一种方式将包括A.cpp 文件在项目2.

第三种方式就是出口的一类,或构造中使用的一个。def文件或使用 dllexport 指令。

把这个编译头文件:

// 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();
   ...
};
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top