c++错误:error LNK2001

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++错误:error LNK2001相关的知识,希望对你有一定的参考价值。

//空的虚函数到底有什么用?能否举例说明一下,谢谢了
//派生类并不一定必须实现基类中的虚函数,如果派生类想通过虚函数机制则必须建立一条从积累到派生类的虚函数路径。许多没有使用虚函数的中间类也必须声明该函数,以保证其后的派生类能使用该虚函数。这样的话,声明一个虚函数就可以达到其目的。

//例如:

#include <iostream.h>

class A


public:

virtual void printOn()cout<<"Class A"<<endl;
;

class B: public A


public:

void printOn()

;

class C: public B

public:

void printOn()cout<<"Class C"<<endl;
;

void Show(A*a)



a ->printOn();



void mian()



A *a = new A;

B *b = new B;

C *c = new C;

Show (a);

Show (b);

Show (c);


//通过上面简单的程序可以看出,虚函数B声明为空,它的意义在于,类B并不需要pringOn()函数,
//声明它是为了保证B的派生类能使用类A的虚函数界面,使调用show(c)能沿着从A对象的虚函数路径正确存取C::printOn()虚函数。

结果出现错误:
--------------------Configuration: Ex_VirtualFunc - Win32 Debug--------------------
Compiling...
1.cpp
Linking...
LIBCMTD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/Ex_VirtualFunc.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

Ex_VirtualFunc.exe - 2 error(s), 0 warning(s)
重点问题:我觉得虚函数实现多态性没多大意义啊!
这样做还要先定义几个指向基类的指针,还要再给它们赋值各个子类对象的地址。
还不如我直接定义每个子类的对象,再用该对象直接调用各个子类???

错误原因:main(),拼成了mian().

虚函数的作用是允许在派生类中对积累的虚函数重新定义,即在同一类族中对同一消息做出不同的响应。
原来的程序若不用虚函数相当于:
A *a = new A;
a ->printOn();
B *b = new B;
b ->printOn();
C *c = new C;
c ->printOn();

用虚函数可简化为:
A *a = new A;

a ->printOn();

a = new B;

a ->printOn();

a = new C;

a ->printOn();

少申请了两个指针。
参考技术A 小农不才~~ 请你在新建工程的 时候先把Win32 Applicatioan 换成
Win32 Console Applicatioan 然后再看看~~~

以上是关于c++错误:error LNK2001的主要内容,如果未能解决你的问题,请参考以下文章

C++静态成员变量必须在类的定义之外进行声明 (error LNK2001: unresolved external symbol)

C++静态成员变量必须在类的定义之外进行声明 (error LNK2001: unresolved external symbol)

c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法

C++ error LNK2001: 无法解析的外部符号

C++中出现error LNK2001,如何解决

c++程序错误error LNK2001: unresolved external symbol "public: void __thiscall CEmp::print(void)&quo