[英]Wrapper around a class C++
假設C ++類具有以下形式的構造函數(除其他構造函數外)
Foo::Foo( FILE *fp ) { etc... }
現在我要創建表單的包裝器類
class WFoo {
Foo::Foo A;
Foo::Foo B;
};
與構造函數
WFoo::WFoo(FILE *fa, FILE *fb) {
A(fa), B(fb);
}
WFoo的定義有什么問題? 提前致謝。
這沒有任何意義...
class WFoo {
Foo::Foo A;
Foo::Foo B;
};
你的意思是...
class WFoo {
public:
Foo A;
Foo B;
WFoo(FILE* fa, FILE* fb);
};
WFoo::WFoo(FILE* fa, FILE* fb) :
A(fa), B(fb)
{
}
還請記住,字段的初始化不是按照您在構造函數中讀取的順序進行,而是按照在類中聲明的順序進行初始化!
所以...
#include <iostream>
struct XFoo
{
XFoo(const char* s) { std::cout << s << std::endl; }
};
struct YBar
{
XFoo a;
XFoo b;
YBar() : a("A"), b("B") {}
};
struct ZBar
{
XFoo b;
XFoo a;
ZBar() : a("A"), b("B") {}
};
int main()
{
YBar y;
ZBar z;
return 0;
}
將打印出來...
A
B
B
A
這是一個初始化列表,但語法已關閉。 嘗試:
WFoo::WFoo(FILE* fa, FILE* fb) : A(fa), B(fb)
{
}
您要查找的語法是:
WFoo::WFoo(FILE *fa, FILE *fb) : A(fa), B(fb) { ... }
並且,除非Foo
位於名為Foo
的命名空間中,否則WFoo
不會:
class WFoo {
Foo A;
Foo B;
};
如果你發布的代碼是psudocode,那么就沒有什么不妥的定義WFoo
。
另一方面,如果您發布的代碼不是psudocode,而是您嘗試編譯和運行的實際代碼,則這是WFoo
:
Foo A;
不是Foo::Foo A
除非Foo
在名為Foo
的命名空間中(這很糟糕) 這就是你想要的:
WFoo::WFoo(FILE* fa, FILE* fb)
: A(fa), B(fb)
{
}
請注意,初始值設定項列表位於構造函數的主體之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.