作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习如何用 C++ 编程,并且正在尝试多态性。当我将这些 cpp 文件编译成目标文件时,我没有收到任何错误。当我尝试制作可执行文件时,出现以下错误:
/tmp/ccsiYtzo.o: In function `expression::expression()':
constant.cpp:(.text._ZN10expressionC2Ev[_ZN10expressionC5Ev]+0x30): undefined reference to `vtable for expression'
/tmp/ccsiYtzo.o:(.rodata+0x24): undefined reference to `typeinfo for expression'
collect2: error: ld returned 1 exit status
我正在使用以下命令进行编译:
g++ constant.cpp main.cpp -o expression
我对这个错误消息的理解是必须定义构造函数表达式,但我相信我已经定义了它。此外,我试图排除声明/定义 expression() 因为默认构造函数应该工作;但是,它会导致相同的错误。非常感谢一些指导。
表达式.h
class expression{
public:
expression(){}
int virtual eval();
char virtual * infix();
char virtual * postfix();
};
class constant : public expression{
public:
constant(int);
int eval();
char * infix();
char * postfix();
private:
int constantInt;
};
常量.cpp
#include "expression.h"
#include <stdio.h>
#include <stdlib.h>
constant::constant(int i){
constantInt = i;
}
int constant::eval(){
return constantInt;
}
char * constant::infix(){
char *retval = (char *) malloc(sizeof(char));
sprintf(retval, "%d", constantInt);
return retval;
}
char * constant::postfix(){
return infix();
}
主要.cpp
#include <iostream>
#include "expression.h"
using namespace std;
int main(){
expression *test = new constant(5);
cout << test -> eval();
return 0;
}
最佳答案
首先,您应该插入 include guards在你的 .h 文件中。
您的问题是您使用 with virtual 关键字声明了您的 class expression
,但没有创建抽象(以 = 0
结尾)。这意味着编译器希望看到它的定义。
要解决您的问题,或向您的类添加定义:
class expression{
public:
expression(){}
virtual ~expression() {}
int virtual eval() {}
char virtual * infix() {}
char virtual * postfix() {}
};
或者将其抽象化:
class expression{
public:
expression(){}
virtual ~expression() {};
int virtual eval() = 0;
char virtual * infix() = 0;
char virtual * postfix() = 0;
};
关于c++ - 接收 undefined reference 错误c++继承/多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47018591/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!