ano*_*non 1 c++ g++ visual-c++
如果是的话,该怎么办?
typedef struct Foo_struct{
Dog d;
Cat* c;
struct Foo_struct(Dog dog, Cat* cat){ this->d = dog; this->c = cat;}
} Foo;
Run Code Online (Sandbox Code Playgroud)
(背面故事:将用Visual C++(在Windows上)编写的程序移植到g ++(在MacOSX上);不知道这个代码是什么样的.
谢谢!
我认为不是.(和Comeau同意我的意见.)你不能像这样定义一个构造函数.
在C++中,结构名称是一等公民.有没有必要聘请老typedef从C.招此外,d和c应该在成员初始化列表中被初始化.这将是有效的(更好的(C++):
struct Foo {
Dog d;
Cat* c;
Foo(Dog dog, Cat* cat) : d(dog), c(cat) {}
};
Run Code Online (Sandbox Code Playgroud)
该代码定义了一个结构(在C++中,与一个类相同,除了它的成员默认是公共的),并带有一个构造函数,用于在创建时初始化其成员.
编辑:作为特拉维斯在他的评论中说,你可能要考虑通过dog作为const参考,而不是将其复制:
Foo(const Dog& dog, Cat* cat) : d(dog), c(cat) {}
Run Code Online (Sandbox Code Playgroud)
如果Dog(我们还没有看到)是一个具有多个内置成员的类,这可能比每个副本传递它要便宜得多.
不,这不对.你不能拥有struct构造函数.一个有效的C++代码以最小的变化会
typedef struct Foo_struct{
Dog d;
Cat* c;
Foo_struct(Dog dog, Cat* cat){ this->d = dog; this->c = cat;} // <-- remove the "struct"
} Foo;
Run Code Online (Sandbox Code Playgroud)
有关更好的方法,请参阅@ sbi的答案.
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |