0

我有一段时间没有接触 C++,希望有人能指出我的类定义中的问题所在。我不断收到一条错误消息,提示“错误:'IPsource' 没有命名类型”。

class AddressPacket {
    std::string address;
    int packets;

    public:
    void initialize(std::string add) {
        address = add;
        packets = 1;
    }
    std::string getAddress() {
        return address;
    }
    int getPackets() {
        return packets;
    }
    bool checkAddress(std::string add) {
        return address == add;
    }
    void addPacket() {
        packets++;
    }
};

class AddressPacketList {
    AddressPacket masterList[100];
    int listCounter;

    public:
    AddressPacketList() { listCounter = 0; }
    void add(std::string add) {
        masterList[listCounter].initialize(add);
        listCounter++;
    }
};

然后在 main 我有...

AddressPacketList IPsource();
IPsource.add("Hello");
4

3 回答 3

4

这并不意味着您认为它意味着什么:

AddressPacketList IPsource();

您认为它声明了一个名为IPsourcetype的对象AddressPacketList并使用AddressPacketList的默认构造函数对其进行初始化。

实际上是一个函数声明。您正在声明一个名为的函数IPsource,它不接受任何参数并按值返回一个AddressPacketList对象。

这个看似离奇的结论,就是所谓的最烦解析的结果。

只需将行更改为:

AddressPacketList IPsource;
于 2012-11-15T16:15:13.563 回答
1

好吧,您正在声明一个名为 的函数IPSource,它返回一个AddressPacketList

AddressPacketList IPsource(); // parsed as function declaration

然后您尝试将其用作对象。您可以通过将声明更改为来修复它

AddressPacketList IPsource;
于 2012-11-15T16:15:22.737 回答
0

尝试这个:

AddressPacketList IPsource;

仅当您声明一个变量并希望使用非默认构造函数对其进行初始化时,才允许使用括号。如果你有这样的构造函数:

AddressPacketList(std::string packet) { 
    masterList[0].initialize(packet);
    listCounter = 1; 
}

然后你可以像这样声明你的局部变量:

AddressPacketList IPsource("ABC");
于 2012-11-15T16:15:14.657 回答