您好我正在尝试在我的课程中创建一个新结构,但我认为某种公共和私人范围存在问题。
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;
};
^在类标题中
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类中。
答案 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 文件。