VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 186|回复: 13

关于虚函数和多态性的问题

[复制链接]
26_avatar_middle
最佳答案
0 
在线会员 发表于 2020-4-16 09:57:04 | 显示全部楼层 |阅读模式
最近在看c++的入门教程,在虚函数这一块遇到了问题。我基类和派生类不能定义同名函数,编译没有问题,但是一运行就报错。请问一下是什么原因?




上一篇:找不到指定的文件名,输入指定的文件名,只能找到当前目录下的指定文件名,无法遍历
下一篇:setfilepointer不能用负数
57_avatar_middle
最佳答案
19 
在线会员 发表于 2020-4-19 18:49:06 | 显示全部楼层
yyg970503 发表于 2020-4-17 10:09
这个是main函数
#include "Dog.h"

这部分代码运行无问题,楼主重新确认一下问题吧
75_avatar_middle
最佳答案
18 
online_supermod 发表于 2020-4-16 10:41:11 | 显示全部楼层
你在基类前面有没有申明该函数位虚函数?virtual这个虚函数申明呢?如果申明了,派生类是可以调用的,
26_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-4-16 10:44:45 | 显示全部楼层
声明了,但还是会报错。编译可以通过,但是无法运行
26_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-4-16 10:46:18 | 显示全部楼层
而且按道理,就算基类函数我没有声明成虚函数的话,实际运行的时候也应该是调用成基类函数而非派生类的函数吧。
57_avatar_middle
最佳答案
19 
在线会员 发表于 2020-4-16 13:06:34 | 显示全部楼层
建议楼主将完整源代码或者可以复现该问题的简单代码发出来,这样方便大家解答
51_avatar_middle
最佳答案
74 
online_admins 发表于 2020-4-16 16:35:15 | 显示全部楼层
还是把源码发上来吧,不然不好确定问题所在
26_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-4-17 10:08:43 | 显示全部楼层
这个是类的声明文件
#pragma once
#include <iostream>
using namespace std;

class CDog
{
       
public:
        virtual void bark()
        {
                cout << "Dogs are barking" << endl;
        }
        CDog();
        ~CDog();
};

class CZangao :public CDog
{
public:
        void bark()
        {
                cout << "Zangaos are barking" << endl;
        }
        CZangao();
        ~CZangao();

private:

};

CZangao::CZangao()
{
}

CZangao::~CZangao()
{
}

class CGoldenhair: public CDog
{
        void bark()
        {
                cout << "Goldenhairs are barking" << endl;
        }
public:
        CGoldenhair();
        ~CGoldenhair();

private:

};

CGoldenhair::CGoldenhair()
{
}

CGoldenhair::~CGoldenhair()
{
}
26_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-4-17 10:09:55 | 显示全部楼层
这个是main函数
#include "Dog.h"

int main()
{
        CDog* dog;
        CZangao zang;
        CGoldenhair golden;
        dog = &zang;
        dog->bark();
        dog = &golden;
        dog->bark();
        return 0;
}
87_avatar_middle
最佳答案
4 
在线会员 发表于 2020-4-20 07:11:51 | 显示全部楼层
难道逗我们玩吗?
26_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-4-20 11:19:27 | 显示全部楼层
不敢逗大佬玩~编译通过的,但是不能运行
错误        1        error LNK2005: "public: __thiscall CZangao::CZangao(void)" (??0CZangao@@QAE@XZ) 已经在 Dog.obj 中定义        D:\Project\ConsoleApplication2\ConsoleApplication2\main.obj        ConsoleApplication2
错误        2        error LNK2005: "public: __thiscall CZangao::~CZangao(void)" (??1CZangao@@QAE@XZ) 已经在 Dog.obj 中定义        D:\Project\ConsoleApplication2\ConsoleApplication2\main.obj        ConsoleApplication2
错误        3        error LNK1169: 找到一个或多个多重定义的符号        D:\Project\ConsoleApplication2\Debug\ConsoleApplication2.exe        1        1        ConsoleApplication2
57_avatar_middle
最佳答案
19 
在线会员 发表于 2020-4-20 11:27:00 | 显示全部楼层
yyg970503 发表于 2020-4-20 11:19
不敢逗大佬玩~编译通过的,但是不能运行
错误        1        error LNK2005: "public: __thiscall CZangao::CZangao(vo ...

构造函数和析构的定义没写。。。或者直接删除
CZangao() {};
~CZangao() {};
26_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-4-20 13:44:06 | 显示全部楼层
直接删除了
87_avatar_middle
最佳答案
4 
在线会员 发表于 2020-4-20 15:07:10 | 显示全部楼层
按照你发出的源码,都能编译运行!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-6-2 10:18

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表