g ++“未定义引用”我的构造函数?

时间:2018-10-08 21:53:53

标签: c++

Maps.cc

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#define NUM_LOCATIONS 25
using namespace std;

class Map
{
    public:
        MapLocation locations[NUM_LOCATIONS];
        int numLocs;
         Map () {
         numLocs = NUM_LOCATIONS;
    }

    void initializeMap (string filen)
    {
     //Clipped because irrelevant

    }

};

Main.cc:

#include "maps.h"
#include "schedule.h"
using namespace std;

int main()
{
Map PawneeMapCoordinates;
}

尝试运行此代码时,出现错误“对Map::Map()的未定义引用”

编译器是否自己为map类创建了一个命名空间,然后尝试使用它?

如果我在自定义命名空间下创建Map类,则noargs构造函数在main中不起作用,应该如何正确创建这些类/命名空间?

1 个答案:

答案 0 :(得分:0)

您的Maps.cc应该如下所示:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

#include "maps.h" // Important!

// #define NUM_LOCATIONS 25 // Move this to the header file
using namespace std;

Map::Map() {
    numLocs = NUM_LOCATIONS;
}

void Map::initializeMap(string filen) {
    ...
}

问题在于,您在cc文件中声明了一个新的Map类,而未从头文件中实现“实际” Map类的方法。实现必须看起来像这样。