Main.cpp的
#include <iostream>
#include "include/Numbers.h"
#include <vector>
#include <string>
#include <fstream>
using namespace std;
int main()
{
ofstream myofile;
ifstream myifile;
myofile.open("output.txt");
myifile.open("input.txt");
int number;
Numbers input;
if(myifile.is_open())
while(myifile >> number) {
input.push_back(number);
}
cout << input.size() << endl;
myofile.close();
myifile.close();
cout << "Hello world!" << endl;
return 0;
}
Numbers.h
#ifndef NUMBERS_H
#define NUMBERS_H
#include <vector>
class Numbers: public std::vector<int>
{
public:
Numbers();
~Numbers();
int size();
Numbers prob();
protected:
private:
};
#endif // NUMBERS_H
Numbers.cpp
#include "../include/Numbers.h"
#include <iostream>
using namespace std;
Numbers::Numbers()
{
}
Numbers::~Numbers()
{
//dtor
}
我正在尝试创建一个新的Numbers类,它继承了vector类的函数。
我得到的错误是对'Numbers :: size()'的未定义引用,尽管push_back函数没有给出任何问题
我正在使用代码块来编写代码,并且我已在构建属性中包含所有文件
答案 0 :(得分:1)
首先,你在做什么并不是一个好主意。它通常不打算将STL类用作基类(除了专门为此设计的那些,例如std :: unary_function)。 std :: vector没有任何虚方法,因此它没有任何值作为公共基类。更糟糕的是,std :: vector甚至没有虚拟析构函数,所以当你以多态方式使用它时,你可能会创建一个内存泄漏:
void deleteVector(std::vector<int>* v)
{
delete v;
}
deleteVector( new Numbers() );
在您的情况下,您声明了一个未在源文件中定义的Method Numbers :: size。您可以使用using声明来使用基类的size-method,但公共方法不需要这样做。
class Numbers: private std::vector<int>
{
public:
using std::vector<int>::size;
};