0

所以当我输入以下内容时,我遇到了这个编译错误:

bash-3.2$ g++ -oa *.cpp

架构 x86_64 的未定义符号:“set_function::set_function(int)”,引用自:ccezs7Gk.o 中的 _main ld:未找到架构 x86_64 的符号 collect2:ld 返回 1 个退出状态

但就引用而言,似乎我的文件中的一切都是正确的。也许我错过了什么?

//
//  hw1_sets.cpp
//
//

#include <iostream>
#include <vector>
#include "hw1.h"

using namespace std;

void set_function::assign()                                        //Assign function
{
    cin >> set_function::sets;
    cout << set_function::sets << endl;
    int i;
    if(sets == "R")                                    //if user inputs R
    {

        for(i=0; i<13; i++)                                       //for loop inputting number into R set
        {
            cin >> R[i];
//            return R[i];
        }

    }
    else if (sets == "S")                             //if user inputs S
    {
        for(i=0; i<13; i++)                                     //for loop inputting number into S set
        {
            cin >> S[i];
//            return S[i];
        }
    }
    else if (sets == "T")                                          //if user inputs T
    {
        for(i=0; i<13; i++)                                     //for loop inputting number into T set
        {
            cin >> T[i];
//            return T[i];
        }
    }
    else
    {
        cout << "This set does not exist! Try again!" << endl;
    }

    cout << " set complete" << endl;
    };

void set_function::clear()                                          //Clear function
{
    //find set

    /*cin >> set_function::set;
     cout << set_function::set << endl;
     int i;
     if(set == set_function::R)
     {
        for(i=0; i<13; i++)
        {
            //clear R values
        }
     }
     else if (set == set_function.S)
     {
        for(i=0; i<13; i++)
        {
            //clear S values
        }
     }
     else if (set == T)
     {
        for(i=0; i<13; i++)
        {
            //clear T values
        }
     }

    //remove all values*/
}

void set_function::unionn()                                         //Union function
{
    //for loop from 0 to 12 (through all elements)
    //if set1[x] or set2[x] = 1
        //solution[x]=1
    //else
        //solution[x]=0

}
void set_function::intersection()                                   //Intersection function
{
    //for loop from 0 to 12 (through all elements)
    //if set1[x] == set2[x]
        //solution[x]=set1[x]
    //else
        //solution[x]=0
}

void set_function::difference()                                     //difference function
{
    //for loop from 0 to 12 (through all elements)
        //set1[x]-set2[x]=solution[x]
}



/*printing the set doesn't work*/
void set_function::print()                                          //print function
{
    /*string setname;
    cin >> setname;
    if (setname = "R")
    {
        for(int i = 0; i<13; i++)
        {
            cout<< R[i] << "-";
        }
        cout << endl;
    }
    else if (setname = "S")
    {
        for(int i = 0; i<13; i++)
        {
            cout<< S[i] << "-";
        }
        cout << endl;
    }
    else if (setname = "T")
    {
        for(int i = 0; i<13; i++)
        {
            cout<< T[i] << "-";
        }
        cout << endl;
    }

    //else if lastdigit
        //end of command or newline*/
}

//exit

//
//  hw1.cpp
//  
//
//
//

#include "hw1.h"
#include <iostream>


using namespace std;

int main()
{
    string function;
    set_function sets(27);

    while(1)
    {
        cout << "sets> ";

        cin >> function;

        if(function=="assign")
        {
            sets->assign();
        }
        else if(function=="clear")
        {
            sets->clear();
        }
        else if(function=="union")
        {
            sets->unionn();
        }
        else if(function=="intersection")
        {
            sets->intersection();
        }
        else if(function=="difference")
        {
            sets->difference();
        }
        else if(function=="print")
        {
            sets->print();
        }
        else if(function=="quit")
        {
//            sets->quit();
            return 0;
        }

        else
        {
            cout<<"error"<<endl;
        }
    }
}

//
//  hw1.h
//  
//
//
//

#include <iostream>

using namespace std;

class set_function
{    
    private:
        bool R[13];
        bool S[13];
        bool T[13];

    public:
        string sets;
        int values[13];
        /*void r()
        {
            R.resize(13);
        }
        void s()
        {
            S.resize(13);
        }
        void t()
        {
            T.resize(13);
        }*/
        set_function(int a){}
        void assign();
        void clear();
        void unionn();
        void intersection();
        void difference();
        void print();
//        void quit();

};

编辑(10/3/13 @12:50p):我更改了评论内容,现在我遇到了这个问题:

hw1.cpp: In function ‘int main()’:
hw1.cpp:28: error: base operand of ‘->’ has non-pointer type ‘set_function’
hw1.cpp:32: error: base operand of ‘->’ has non-pointer type ‘set_function’
hw1.cpp:36: error: base operand of ‘->’ has non-pointer type ‘set_function’
hw1.cpp:40: error: base operand of ‘->’ has non-pointer type ‘set_function’
hw1.cpp:44: error: base operand of ‘->’ has non-pointer type ‘set_function’
hw1.cpp:48: error: base operand of ‘->’ has non-pointer type ‘set_function’

编辑(10/3/13 @1:23p):已修复。更改了以下内容:

set_function *sets = new set_function(27)

set_function *sets;
sets = new set_function(27);

现在可以正确编译。谢谢!

4

2 回答 2

3

这不是编译器错误,而是链接器错误。你得到它是因为你为你的set_function类声明了一个构造函数,但从未定义它。

于 2013-10-02T23:01:24.633 回答
0

所以你set_function::set_function(int a)hw1.h. 然后main.cpp被正确编译,因为对构造函数的调用set_function是正确的,如在头文件中声明的那样hw1.h

但是该功能未在任何地方实现,发生链接并且未解决调用。

您应该在头文件或hw1.cpp文件中实现它。

于 2013-10-02T23:03:35.767 回答