在类公共方法中创建一个新结构

时间:2013-10-28 18:59:49

标签: c++ class inheritance structure

您好我正在尝试在我的课程中创建一个新结构,但我认为某种公共和私人范围存在问题。

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();
}

它表示新的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;

};

ENDIF

^在类标题中

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类中。

3 个答案:

答案 0 :(得分:1)

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

即。 ClassName::Currency

当然Currency需要在你这样做的范围内可见,并且public应该照顾它。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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,因此有时会使用第二或第三种形式来避免在任何地方使用 struct 关键字。这很有用,因为许多库都有相同的C和C ++的 .h 文件。