未定义的引用类?

时间:2015-01-31 06:17:45

标签: c++

为什么在尝试打印MySet::MySet()时,它会给我vector未定义的引用?任何帮助将非常感激。感谢

 #include <iostream>
    #include <vector>
    using namespace std;
    class MySet{
        public:
            MySet(); 
            MySet(const vector<int> v3); 
        void printVector(const vector<int>& newMyVector);

    };

    int main()
    {
        vector<int> myVector;
        myVector.push_back(1);
        myVector.push_back(2);
        MySet m;
        m.printVector(myVector);
        return 0;
    }

    void MySet::printVector(const vector<int>& newMyVector){
        cout << "Vector: ";
        for(unsigned int i = 0; i < newMyVector.size(); i++)
        {
            cout << newMyVector[i] << "|";
        }

    }

2 个答案:

答案 0 :(得分:1)

  

为什么在尝试打印MySet::MySet()时,它会给我vector未定义的引用?

您正在使用

创建MySet的实例
    MySet m;

使用默认构造函数。默认构造函数已在类中声明,但尚未定义。您可以通过定义来修复它。

MySet::MySet() {}

答案 1 :(得分:0)

您的程序不包含MySet构造函数的定义。构造函数的名称是MySet::MySet()。因此,当您尝试创建对象的实例时,编译器不知道该怎么做。有几个解决方案:

  1. 删除声明构造函数的“public:”之后的行。如果你没有声明任何构造函数,你的对象将只使用编译器提供的默认构造函数,这可能已经足够了。
  2. 或者,在程序的某处添加构造函数的定义。
  3. 或者,您可以更改声明MySet::MySet()的行,以便 定义它。
  4. 选项2的代码看起来像这样,在课外的某个地方:

    MySet::MySet()
    {
      // do stuff here to construct object
    }
    

    选项3的代码看起来像这样,在类中的某个地方:

    MySet()
    {
      // do stuff here to construct object
    }