从多个文件编译给出“未定义的引用”

时间:2017-10-17 01:31:22

标签: c++ c++11 compiler-errors linker-errors undefined-reference

我需要在单独的文件中提供CFG类,但我不确定如何将它与相关的.h和主程序一起编译。

我已#include编辑.h文件,我已在命令行询问了这两个文件,但我不确定为什么将它们编译在一起是错误的。

思想?

CFG.cpp:

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

class CFG
{
    public:
        string code[25];
        char startNT;
    //private:

    CFG(string inCode[], int stringLen)
    {
        for (int a = 0; a < stringLen; a++)
        {
            //cout << inCode[a] << endl;
            this->code[a] = inCode[a];
        }
        for (int a = 0; a < stringLen; a++)
        {
            cout << this->code[a] << endl;
        }
    }

    char getStartNT()
    {
        return startNT;
    }

    void setStartNT(char stNT)
    {
        startNT = stNT;
    }

    bool processData(string inString, string wkString)
    {
        //Our recursive function
        return true;
    }

    void garbage()
    {
        return;
    }
};

CFG.h:

#ifndef _cfg_h_
#define _cfg_h_

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

class CFG
{
    public:
        string code[25];
        char startNT;

        CFG(string inCode[], int stringLen);
        char getStartNT();
        void setStartNT(char stNT);
        bool ProcessData(string inString, string wkString);
        void garbage();
};

#endif

cfg_entry.cpp:

#include <stdio.h>
#include <iostream>
#include "cfg.h"

using namespace std;

int main()
{
    string inArray[5];
    inArray[0] = "test0";
    inArray[1] = "test1";
    inArray[2] = "test2";
    inArray[3] = "test3";
    inArray[4] = "test4";
    CFG * cfg1 = new CFG(inArray, 5);
    cfg1->garbage();
    return 0;
}

编译错误:

art@tv:~/Dropbox/Weber/CS 4110/Individual Assignment 2$ g++ -g -std=c++11 -Wall -o cfg_entry cfg.cpp cfg_entry.cpp
/tmp/ccICQEd0.o: In function `main':
/home/art/Dropbox/Weber/CS 4110/Individual Assignment 2/cfg_entry.cpp:15: undefined reference to `CFG::CFG(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, int)'
/home/art/Dropbox/Weber/CS 4110/Individual Assignment 2/cfg_entry.cpp:16: undefined reference to `CFG::garbage()'
collect2: error: ld returned 1 exit status

1 个答案:

答案 0 :(得分:0)

我发现了我的问题。在我的例子中,头文件定义了类,并且.cpp文件再次重新定义它,尝试创建2个CFG类实例。 .hpp只处理函数定义时,.h需要处理类声明和变量实例化。

cfg.h:

var $circle = $('.circle');
function moveCircle(e) {
TweenLite.to($circle, 0.7, {
css: {
  left: e.pageX,
  top: e.pageY
}
  });
}

$(window).on('mousemove', moveCircle);

cfg.cpp:

#ifndef _cfg_h_
#define _cfg_h_

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

class CFG
{
    private:
        string code[25];
        char startNT;

    public:
        CFG(string inCode[], int stringLen);
        char getStartNT();
        void setStartNT(char stNT);
        bool processData(string inString, string wkString);
        void garbage();
};

#endif