0

そのため、次を配置すると、このコンパイルエラーが発生しました。

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

アーキテクチャ x86_64 の未定義シンボル: "set_function::set_function(int)"、参照元: ccezs7Gk.o ld の _main: アーキテクチャ 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_functionhw1.h

しかし、その機能はどこにも実装されておらず、リンクが発生し、呼び出しは解決されません。

ヘッダーファイルまたはファイルに実装する必要がありhw1.cppます。

于 2013-10-02T23:03:35.767 に答える