0

您好,我正在尝试在我的班级内创建一个新结构,但我认为某种公共和私有范围存在问题。

typedef struct Currency
{
Currency(Coin *coin, Currency *next, int _position) : _coin(coin), _next(next),  _position(0) {}
Currency() : _next(NULL), _position(0) {}
Coin *_coin;
Currency *_next;
int _position;
};

那是我在课堂公共部分内的结构,当我尝试这样做时

if(location <= exit)
{
start = location + 11;
begin = response.find("label", start);
end = begin - start - 3;
findStrings(start, end, s, &response);
curr._next = new Currency();
}

它表示 new Currency() 调用的预期类型说明符。有什么我遗漏的东西还是不应该以这种方式使用结构?

类交换{公共:

    typedef struct Badge
    {
        Badge(std::string id, Badge next, Badge prev, int length) : _id(id), _next(&next), _prev(&prev), _position(length) {}
        Badge() : _id(""), _next(NULL), _prev(NULL), _position(0) {}
        std::string _id;
        Badge *_next;
        Badge *_prev;
        int _position;
    };


    typedef struct Currency
    {
        Currency(Coin *coin, Currency *next, int _position) : _coin(coin), _next(next), _position(0) {}
        Currency() : _next(NULL), _position(0) {}
        Coin *_coin;
        Currency *_next;
        int _position;
    };

    /* constructor and destructor */
    Exchange();
    Exchange(std::string str);
    ~Exchange();

    /* Assignment operator */
    Exchange& operator =(const Exchange& copyExchange);
    void parseTradePairs(Currency curr, const std::string response, int begin, int exit);

private:        
    std::string _exch;
    Currency *_currencies;
    Badge *_ident;

};

万一

^ 在类头中

Exchange::Exchange()
{
    _exch = "";
}
Exchange::Exchange(std::string str)
{
    _exch = str;
    _ident = new Badge;
    _currencies = new Currency;

    std::string pair;
    std::string response;
    CURL *curl;

    getTradePairs(curl, response);
    int exit = response.find_last_of("marketid");
    parseTradePairs(*_currencies, response, 0, exit);

}
void parseTradePairs(Exchange::Currency curr, std::string response, int begin, int exit)
{
     int start;
     int end;
     string s;
     int location = response.find("marketid", begin);
    if(location <= exit)
    {
        start = location + 11;
        begin = response.find("label", start);
        end = begin - start - 3;
        findStrings(start, end, s, &response);
        curr._next = new Currency();
    }

}

^ 显然是在 cpp 类中。

4

3 回答 3

1

如果您在Currency类的方法中实例化,那么这应该可以正常工作。但是,如果您在Currency其他地方进行实例化,则需要使用类的名称来限定它的范围。

IEClassName::Currency

当然Currency需要在您执行此操作的范围内可见,并且public应该注意这一点。

于 2013-10-28T19:21:40.140 回答
1

.cpp 中的函数定义与类无关Exchange。你需要写:

void Exchange::parseTradePairs
         (Exchange::Currency curr, std::string response, int begin, int exit)
{
    // ...
}

另外:在您的类范围之外的任何地方,您都需要使用它Exchange::Currency来访问该类型。

于 2013-10-28T19:24:06.943 回答
0

(注意:这不是对已编辑问题的回答,否决请求删除... :-)

一个问题是这样的:

typedef struct Currency {
};

它可以编译,但 C++ 编译器应该说类似warning: 'typedef' was ignored in this declaration(如果没有,则启用警告!)。您应该使用以下之一:

struct Currency {
}; // type 'struct Currency' With implicit typedef in C++

这在 C++ 中与以下内容基本相同:

typedef struct Currency {
} Currency; // explicit typedef

或者

typedef struct {
} Currency; // anonumous struct With typedef type name

通常最好在 C++ 中使用第一种形式。在某些极端情况下可能存在细微差别,因此请保持简单。

C 不执行隐式 typedef,因此有时使用 2 或 3 形式来避免需要在任何地方使用struct关键字。很高兴知道这一点,因为许多库对于 C 和 C++ 都有相同的.h文件。

于 2013-10-28T19:21:54.397 回答