实现构造函数时出现LNK2019错误

时间:2014-07-26 18:30:20

标签: c++ lnk2019

我在构造函数的实现方面遇到了一些麻烦,我无法弄清楚是什么问题。我花了很多时间来解决这个问题:感谢某种建议。

主要代码是:

#include "stdafx.h"
#include "Rocket.h"

#include <iostream>
#include <fstream>

using namespace std;


int main()
{
    Rocket* rocket;
    rocket=new Rocket();
    //LLA* position=rocket->positionLLA;
    return 0;
}

Rocket.h

#pragma once

#include "LLA.h"

class Rocket {
public: 
    Rocket(); // Default constructor
    LLA* positionLLA;
};

Rocket.cpp

#include "stdafx.h"

#include "Rocket.h"
#include <iostream>
using namespace std;

Rocket::Rocket() // Default constructor
{
     // Initialise the position
     positionLLA=new LLA();
}

错误说:

error LNK2019: unresolved external symbol "public: __thiscall Rocket::Rocket(void)" (??0Rocket@@QAE@XZ) referenced in function _main.

我知道错误与未声明变量有关,但我认为我已经声明了所有类和构造函数。

PS:我正在使用Visual Studio 2008来添加依赖项。

2 个答案:

答案 0 :(得分:3)

我假设您的.h文件中正确定义了LLA

您是将Rocket.cpp编译为Rocket.o,将main.cpp编译为main.o,然后将两个目标文件链接在一起?

您的错误似乎暗示链接器无法从Rocket.o获取符号信息,这通常意味着找不到Rocket.o

哦,作为一个细节,由于Rocket使用LLA *,你不需要在Rocket.h中包含LLA.h,你可以简单地转发声明

class LLA;

答案 1 :(得分:-2)

您可能希望在标头文件中添加#ifndef#define#endif。在不同的文件中包含多个相同的东西会导致复杂化。