提问人:Anirudh Kanaparthy 提问时间:2/28/2022 更新时间:2/28/2022 访问量:99
我在程序中使用虚拟功能时获得了LNK2005、LNK2001和LNK1120
I am getting LNK2005, LNK2001 and LNK1120 while using virtual function in my Program
问:
我是初学者,所以这个问题对你来说可能微不足道。 所以我有以下文件:
- 基数.h
- 派生.h
- 基数 .cpp
- 派生的 .cpp
- 测试Cpp.cpp
基数.h
#include <iostream>
namespace App
{
class Base
{
public:
virtual void Print();
};
}
基数 .cpp
#include "base.h"
namespace App
{
}
派生.h
#include "base.h"
class Derived : public App::Base
{
public:
void Print();
};
派生的 .cpp
#include "derived.h"
void Derived::Print()
{
std::cout << "This works!! form Derived class\n";
}
最后是TestCpp.cpp
#include "derived.h"
int main()
{
std::cout << "Hello World!\n";
Derived d;
d.Print();
return 0;
}
我不知道我做错了什么。请帮帮我。
答:
0赞
The Coding Fox
2/28/2022
#1
只需在文件中添加一个定义:Print()
base.cpp
namespace App
{
void Base::Print() { }
}
它可能里面没有任何东西,但它应该在那里。
或者通过使其纯化来指示要在派生类中定义:Print()
virtual void Print() = 0;
2 个选项中的任何一个都可以。同样在你的派生类中,最好是:(点击这里知道为什么Print()
override
)
class Derived : public App::Base
{
public:
void Print() override;
};
1赞
user12002570
2/28/2022
#2
问题在于,您只在类中声明了虚函数,而没有定义它。Print
Base
从 C++03 标准: 10.3 虚拟函数 [class.virtual]
在类中声明的虚函数应在该类中定义或声明为纯 (10.4),或两者兼而有之;但不需要诊断 (3.2)。
因此,解决这个问题的方法是在类中实现/定义成员函数,或者通过将声明替换为 inside 类来使其成为纯虚拟函数virtual
Print
Base
virtual void Print() = 0;
Base
解决方案 1
基数 .cpp
#include "base.h"
namespace App
{
void Base::Print()
{
}
}
解决方案 1:演示
解决方案 2
基数.h
#include <iostream>
namespace App
{
class Base
{
public:
virtual void Print() = 0;
};
}
解决方案 2:演示
评论
Derived::Print()
Base::Print()
virtual void Print();
Base
virtual void Print() = 0;
Base
.Print()