奇怪的编译器错误

Weird Compiler Errors

本文关键字:错误 编译器      更新时间:2023-10-16

我无法理解下面的代码,我得到了大量的错误。

/usr/bin/ld:/usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11

它们似乎都与上面的相似,只是末尾的数字不同。这很可能是由于我试图从代码中删除一个类定义。

#include <string>
using namespace std;
static const float MAX_SATCHEL_VOLUME = 0.20; // in m^3
static const float MAX_CARTON_VOLUME = 0.50; // in m^3
static const float MAX_PALLET_VOLUME = 2.00;// in m^3
static const float SATCHEL_COST_PER_KILO = 2.00; // in dollars
static const float CARTON_COST_PER_KILO = 1.00; // in dollars
static const float PALLET_COST_PER_KILO = 0.50; // in dollars
class freight
{
    public:
        enum FreightType
        {
            SATCHEL,
            CARTON,
            PALLET,
        };
        float cost()
        {
            return perKiloCost * weight;
        }
    private:
        freight (string set_address, float set_length, float set_width, float set_height, float set_weight);
        string address;
        float length;
        float width;
        float height;
        float weight;
        FreightType type;
        float perKiloCost;
        ~freight();
};
freight::freight (string set_address, float set_length, float set_width, float set_height, float set_weight)
{
    address = set_address;
    length = set_length;
    width = set_width;
    height = set_height;
    weight = set_weight;
    type = PALLET;
    perKiloCost = 1.00;
        {
            float volume = length * width * height;
            if(volume > MAX_PALLET_VOLUME)
            {
                type = PALLET;
                perKiloCost = PALLET_COST_PER_KILO;
            }
            else if(volume > MAX_CARTON_VOLUME)
            {
                type = CARTON;
                perKiloCost = CARTON_COST_PER_KILO;
            }
            else
            {
                type = SATCHEL;
                perKiloCost = SATCHEL_COST_PER_KILO;
            }
        }
}
freight::~freight()
{
}

您必须使用限定名称std::string

freight(std::string set_address, float set_length, float set_width, float set_height, float set_weight):

另一个问题是您用参数定义了构造函数两次:一次在类定义内部,另一次在类定义外部。删除一个定义

还在类定义之外定义了析构函数。您必须首先至少在类定义中声明它。

使用限定的std::string或用using namespace std;传播其命名空间

还有,为什么要在类声明中定义然后函数内联,而在下面又定义第二次呢?

而且,您没有在类声明声明析构函数。