“未定义引用”,而我正在尝试继承向量类

时间:2014-02-05 18:26:10

标签: c++ undefined-reference

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函数没有给出任何问题

我正在使用代码块来编写代码,并且我已在构建属性中包含所有文件

1 个答案:

答案 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;
};