Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance C++;错误LNK2019:多标头类中未解析的外部符号_Inheritance_Visual Studio 2012_Lnk2019 - Fatal编程技术网

Inheritance C++;错误LNK2019:多标头类中未解析的外部符号

Inheritance C++;错误LNK2019:多标头类中未解析的外部符号,inheritance,visual-studio-2012,lnk2019,Inheritance,Visual Studio 2012,Lnk2019,全部 我打赌这是一个经常被问到的问题。但每次都是在不同的背景下提出的。我的问题是:我在VS2012 Express中有一个项目。该项目包含很少的头文件。在这里粘贴整个项目是没有意义的,因此我只给出一个简单的结构 在header.h头文件中,我有一个父类Sim,定义如下: class Sim { protected: // some member data public: Sim(int x, int y, A a); vector<int

全部

我打赌这是一个经常被问到的问题。但每次都是在不同的背景下提出的。我的问题是:我在VS2012 Express中有一个项目。该项目包含很少的头文件。在这里粘贴整个项目是没有意义的,因此我只给出一个简单的结构

在header.h头文件中,我有一个父类Sim,定义如下:

class Sim
{
    protected:
    // some member data
    public:
       Sim(int x, int y, A a);
       vector<int> return_parameters(A a);  // problems happen at this function
       // class A is defined in another header file and properly included here
       // function return_parameters has no definition, thus is an abstract function
}

Sim::Sim(int x, int y, A a)
{// some operations}
编译器给出一个LNK2019错误,表示函数Sim_-son::Sim_-son(void)中引用的未解析外部符号Sim::return_参数

我将行“Obj_son.return_parameters(a)”改为逗号,然后错误消失。所以我想这是麻烦的根源

有人能帮我摆脱这一切吗?非常感谢

致意
Long

首先,你的main应该是

int main() {
    return 0;
}
第二,你有一个
在下面的语句之后

Obj_son.return_parameters(a)

此外,您的类“Sim”需要以
结尾

在类
Sim
的声明中,您告诉编译器您有一个名为
return\u parameters
的函数,但您没有给它一个实现,因此不会生成
Sim::return\u parameters
的目标代码。只要不调用此函数就可以了,因为它的目标代码不是必需的。但是当您调用它时,链接器需要它的目标代码,但找不到它,因此它会给出一个错误

发生这种情况是因为您没有告诉编译器
return\u parameters
是一个虚拟函数。尝试:

class Sim
{
    protected:
    // some member data
    public:
       Sim(int x, int y, A a);
       virtual vector<int> return_parameters(A a) = 0;
}
问题在于,不提供函数体并不能使函数成为虚拟函数。因此,提供了关键字
virtual
:)


在我看来,您需要更多一点关于虚拟函数的培训。请查看此链接:

欢迎使用堆栈溢出!您不需要在帖子中包含签名-您的用户卡将自动添加。阅读更多细节。
Obj_son.return_parameters(a)
class Sim
{
    protected:
    // some member data
    public:
       Sim(int x, int y, A a);
       virtual vector<int> return_parameters(A a) = 0;
}
class Sim
{
    protected:
    // some member data
    public:
       Sim(int x, int y, A a);
       virtual vector<int> return_parameters(A a)
       {
           return vector<int>();
       }
}