在以下程序中获取编译链接错误

时间:2013-08-02 08:35:13

标签: c++ header linker

我收到错误,我完全不知道为什么......我已经搜索过这个网站而找不到任何东西......

我的错误是:`LNK2019:未解析的外部符号“public:__thiscall campaign ::〜campaign(void)”(?? 1campaign @@ QAE @ XZ)在函数“public:__thiscall sale :: sale(int, int,int,class agent,class campaign)“

这是我的代码:

#include "stdafx.h";
#include <iostream>
#include "campaign.h";

//constructor
campaign::campaign()
{
    campaign_name = "Campaign Undefined";
    campaign_id = -1;
    campaign_data_type = 0;
    campaign_region_type = 0;
}

/////////////////////////////
//Accessor Functions      //
///////////////////////////

std::string campaign::getName()
{
    return campaign_name;
}

int campaign::getCampID()
{
    return campaign_id;
}

int campaign::getDataType()
{
    return campaign_data_type;
}

int campaign::getRegionType()
{
    return campaign_region_type;
}

/////////////////////////////
//Mutator Functions       //
///////////////////////////

void campaign::setName(std::string newName)
{
    campaign_name = newName;
}

void campaign::setCampID(int newCampID)
{
    campaign_id = newCampID;
}

void campaign::setDataType(int newDType)
{
    campaign_data_type = newDType;
}

void campaign::setRegionType(int newRType)
{
    campaign_region_type = newRType;
}

对不起超长的帖子,如果有人在这里有大约15分钟并且没有更好的事情要做,如果你能查看我的代码并给我一个关于我做错了什么的线索,我将不胜感激。谢谢:))

5 个答案:

答案 0 :(得分:1)

您没有实施campain::~campain()。由于您在头文件中声明了它,因此您应该提供定义。在你的情况下,析构函数不是必需的,编译器提供的默认值就足够了。因此,从头文件中删除声明。

答案 1 :(得分:1)

您已声明campaign析构函数,但尚未在任何位置定义它:

class campaign
{
    public:
        campaign();
        ~campaign(); // you need a definition for this

您需要为它提供一个定义(一个实现),或者,如果您不需要析构函数执行任何特殊操作,请删除声明并让编译器自动为您提供析构函数。

答案 2 :(得分:1)

您没有为campaign定义析构函数。把它放在你的实现文件中:

campaign::~campaign()
{

}

如果您希望您的类使用默认的析构函数,您可以从头文件中删除~campaign(void);,然后不需要定义它。

答案 3 :(得分:0)

正如Nbr44已经评论过的那样,你没有定义你的campaign::~campaign析构函数。您在头文件中声明了它但没有提供定义

答案 4 :(得分:0)

您没有实施广告系列析构函数。 如果它是微不足道的,不要声明它