【问题标题】:Errors LNK2019 and LNK2028 in VC++ Express 2008VC++ Express 2008 中的错误 LNK2019 和 LNK2028
【发布时间】:2012-02-09 04:47:41
【问题描述】:

我正在尝试使用 2 个项目构建解决方案并收到以下错误消息:

ColliderTest.obj : error LNK2028: undefined token (0A000080) "public: __thiscall Rect::Rect(int)" (??0Rect@@$$FQAE@XZ) 在函数 "void __cdecl myFunction(void)" 中引用(?myFunction@@$$FYAXXZ)

ColliderTest.obj : 错误 LNK2019: 函数“void __cdecl myFunction(void)”(? myFunction@@$$FYAXXZ)

代码:

  • 在“对撞机”项目中,我有这些文件:

对撞机.h

#pragma once

class Rect{

    int x;
    int y;
    unsigned int w;
    unsigned int h;

public:
    Rect(int x);
};

对撞机.cpp

#include "Collider.h"

Rect::Rect(int x){
    this->x = x;
}
  • 项目“ColliderTest”有一个对项目 Collider 的引用,这个文件:

ColliderTest.cpp

#include "../app/Collider.h"

void myFunction();

void myFunction(){

    Rect rect(4);
}

此外,每个项目都有一个 main.cpp 文件,其中 main() 函数为空,以避免编译器对入口点的抱怨。

【问题讨论】:

标签: c++ visual-c++ lnk2019


【解决方案1】:

两个项目都有一个主要功能?

这意味着您正在构建两个可执行文件。可执行文件通常不导出函数。

您需要一个可执行文件和一个类库 (dll)。

顺便说一句:如果你有一个空的 main 函数,你怎么知道你的程序是否运行了?

【讨论】:

  • 不可能有一个可执行的项目,另外一个来测试它?我记得我用 C# 做过类似的事情,所以我认为它会是一样的。
  • C# 支持多种主要方法,您可以告诉编译器使用哪一个(通过它所在的类名)用于特定构建。 C++ 不直接支持这种东西,尽管类似的东西可能会通过巧妙的项目/makefile 配置拼凑在一起。
  • @Granjero:您可能有两个可执行文件,但您必须使用进程间通信来测试一个使用另一个。我怀疑这不是你想要的。
  • 不,我想最简单的方法是制作一个dll然后:P
猜你喜欢
  • 2015-07-08
  • 1970-01-01
  • 2013-01-04
  • 2023-03-27
  • 2012-07-05
  • 1970-01-01
  • 2018-03-27
  • 2021-01-17
  • 1970-01-01
相关资源
最近更新 更多