错误未定义引用.. c ++?

时间:2014-02-25 20:57:41

标签: c++ arrays pointers header

所以我有一个类y正在被y类使用,它也会被其他类使用。

.h for class x

#pragma once
#include <string>
#ifndef X_H
#define X_H
class x
{
public:
    x();
    const std::string & getName() const;
    int getQuantity();

private:
    std::string name;
    int quantity;
};
#endif

.cpp for x

#include <string>
#include "x.h"
using namespace std;



x::x()
: name(),quantity(0)
{
}
const string & x::getName() const
{
return  name;
}
const string & x::getQuantity() const
{
return quantity;
}

这是y类的.h

#pragma once
#include <string>
#include <array>
#include "x.h"

class y
{
public:
    static const size_t number = 20;

    y();
    float getTotal();

private:
    std::array<X*, number> arrayList;
};

这是y类的.cpp

#include "y.h"
#include "x.h"
#include <array>
#include <string>
#include <iostream>

using namespace std;

y::y()
: arrayList()
{
}

float y::getTotal()
{
    float total=0.0;
    for(int i=0; i< number; i++)
    {
        if(arrayList[i] != nullptr)
        {
            total += arrayList[i]->getQuantity();
        }
    }
}
y类中的

方法使用指向方法y的指针数组,我尝试使用数组成员使用类x中的某些方法但是我收到错误说:

undefined reference to `x::x(...)

我认为它与预处理器或标头有关。

2 个答案:

答案 0 :(得分:0)

这意味着你忘了定义默认构造函数X :: X()或其他一些带有参数(x :: x(...)是什么意思?)X类的构造函数。你只在它中声明它类定义。 或者另一个原因是具有构造函数定义的模块未包含在项目构建中。

答案 1 :(得分:0)

在类x中,您已显式声明了默认构造函数x(),但尚未对其进行定义。如果要使用默认构造函数,请删除其定义或使用x::x():name(std::string()),quantity(0){}

进行定义