抱歉,如果这个答案应该是显而易见的,也许这有一个模式名称,如“笨拙的分配重载”,并且没有按正确的主题搜索 - 重定向最受欢迎的代码摘录:
class MySet {
private:
int lower;
int upper;
char *data;
public:
MySet( int l, int u, const char *val = 0 );
MySet &operator=( MySet &rhs );
MySet &operator=( const char *val );
};
int main(int i, const char *argv[])
{
MySet A(1,10);
A = "hello";
MySet B(1,10, "hello");
MySet C(1,10) = "hello";
}
A 和 B 的分配工作,但 C 然后 g++ 抱怨....:myset.cxx:19:16: error: expected ',' or ';' 在'='标记之前
不是什么大问题,但一直试图理解为什么无效。
感谢您提供任何有用的回复。
更多信息...猜我是要编辑我的操作?
关于为什么上述被认为是非法的令人费解,一直在寻找一个明确的原因......当然还有一个技巧可以让编译器接受这种符号。
考虑到合法的类似用途
struct toons {
char first[10];
} flintstone[] = {
"fred",
"wilma",
""
};
来自几十年的 C 编译器,如下所示:
typedef struct {
char family[10];
struct {
char name[10];
} members[6];
} toongroup;
toongroup rubble = {
"rubble",
{
"barney",
"wilma",
""
}
}
toongroup rubble = {
"rubble",
{
"barney",
"wilma",
"", "", "", ""
}
};
toongroup jetsons = { "jetson", { "george", "jane", "", "", "", "" } };
都受到 c++ 编译器的尊重。可以在结构上具有成员函数,它仍然可以工作:
typedef struct toongroup {
public:
bool add( const char *newbaby ) {
for(int i; i<6; i++) {
if(strlen(members[i].name) == 0) {
strcpy(members[i].name, newbaby);
return true;
}
if(strcmp(members[i].name, newbaby) == 0)
return false;
}
return false;
}
char family[10];
struct {
char name[10];
} members[6];
} toongroup;
toongroup jetsons = { "jetson", { "george", "jane", "", "", "", "" } };
jetsons.add( "elroy" );
添加构造函数时开始反对:
typedef struct toongroup {
toongroup( const char *f, const char *m, ... ) {
}
error: in C++98 ‘rubble’ must be initialized by constructor, not by ‘{...}’
error: could not convert ‘{"rubble", {"barney", "wilma", "", "", "", ""}}’ from ‘<brace-enclosed initializer list>’ to ‘toongroup‘
想知道是否可以使用正确的初始化程序,以便编译器可以匹配构造函数
toongroup empty;
toongroup nobody = empty;
toongroup rubble( "rubble", "barney", "wilma", "" );
甚至
toongroup empty;
toongroup cancelled;
toongroup nobody = empty;
toongroup rubble( "rubble", "barney", "wilma", "" );
toongroup jetsons( "jetson", "george", "jane", "" );
jetsons.add( "elroy" );
添加
toongroup &operator=( toons &t );
允许
jetsons = cancelled;
但不是
toongroup jetsons( "jetson", "george", "jane", "" ) = cancelled;
为这个结束了一个很长的帖子道歉,但我正在寻找一些关于为什么构造函数+赋值被拒绝以及如何/是否可以容纳的任何想法的参考。
在 MySet 的符号中,这将是一个熟悉的声明,在我宣布它非法之前,我想检查一下是否错过了一个技巧。
谢谢。