c ++未定义对vtable的引用 [英] c++ undefined reference to vtable

查看:228
本文介绍了c ++未定义对vtable的引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习C ++。我试图做一个练习,我定义一个纯虚拟类的单个函数的几个实现。我无法链接使用这些实现的类。

  ==> BasicMath.h <== 
#ifndef BASIC_MATH_H
#define BASIC_MATH_H

#include< string>
#include< vector>

class BasicMath {};


#endif // BASIC_MATH_H

==> Operation.h< ==

#ifndef OPERATION
#define OPERATION

#include< string>
#include< vector>

类操作{
public:
virtual void perform(std :: vector< std :: string> vec)= 0;
};


#endif //操作

==> Sum.h <==
#ifndef SUM_H
#define SUM_H

#includeOperation.h

类Sum:public操作{
public:
void perform(std :: vector< std :: string> vec);
};

#endif // SUM_H

==> BasicMath.cpp< ==
#ifndef BASIC_MATH_C
#define BASIC_MATH_C

#include< string>
#include< vector>
#include< iostream>
#includeBasicMath.h
#includeSum.h

int main(int argc,char * argv []){
Sum op;
}

#endif // BASIC_MATH_C

==> Sum.cpp< ==
#ifndef SUM_C
#define SUM_C

#include< vector>
#include< string>
#include< iostream>
#includeSum.h

void Sum :: perform(std :: vector< std :: string> vec){
using namespace std;
int total = 0;
cout<< Total:<<总< \\\
;
};

#endif // SUM_C

编译:

  $ g ++ -c Sum.cpp 
$ g ++ -o BasicMath BasicMath.cpp
/tmp/cc1VXjNl.o:BasicMath。 cpp :(。text $ _ZN3SumC1Ev [Sum :: Sum()] + 0x16):未定义引用`vtable for Sum'
collect2:ld返回1退出状态
/ pre>

<95>我95%肯定我在这里至少做一个蠢事 - 但我的大脑拒绝告诉我什么。



我看到这个问题,但是没有解决我的问题。

不要在编译链接行中包含Sum.o对象文件(第二个g ++使用)。


I'm learning C++. I'm trying to do an exercise where I define several implementations of a pure virtual class with a single function. I'm having trouble linking the class that uses these implementations.

==> BasicMath.h <==
#ifndef BASIC_MATH_H
#define BASIC_MATH_H

#include<string>
#include<vector>    

class BasicMath { };


#endif // BASIC_MATH_H

==> Operation.h <==

#ifndef OPERATION
#define OPERATION

#include<string>
#include<vector>    

class Operation {
 public:
  virtual void perform(std::vector<std::string> vec) = 0;
};


#endif // OPERATION

==> Sum.h <==
#ifndef SUM_H
#define SUM_H

#include "Operation.h"

class Sum: public Operation {
 public:
  void perform(std::vector<std::string> vec);
};

#endif // SUM_H

==> BasicMath.cpp <==
#ifndef BASIC_MATH_C
#define BASIC_MATH_C

#include <string>
#include <vector>
#include <iostream>
#include "BasicMath.h"
#include "Sum.h"

int main(int argc, char* argv[]) {
  Sum op;
}

#endif // BASIC_MATH_C

==> Sum.cpp <==
#ifndef SUM_C
#define SUM_C

#include <vector>
#include <string>
#include <iostream>
#include "Sum.h"

void Sum::perform(std::vector<std::string> vec) {
    using namespace std;
    int total = 0;
    cout << "Total: " << total << "\n";
};

#endif // SUM_C

Compilation:

$ g++ -c Sum.cpp
$ g++ -o BasicMath BasicMath.cpp
/tmp/cc1VXjNl.o:BasicMath.cpp:(.text$_ZN3SumC1Ev[Sum::Sum()]+0x16): undefined reference to `vtable for Sum'
collect2: ld returned 1 exit status

I'm 95% sure I'm doing at least one foolish thing here - but my brain is refusing to tell me what.

I have see this question but have not managed to fix my issue.

解决方案

You're not including the Sum.o object file on your compile&link line (second g++ use).

这篇关于c ++未定义对vtable的引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆