为什么这不能正确初始化?

发布于 2024-11-03 09:25:27 字数 335 浏览 3 评论 0原文

我正在尝试在另一个构造函数中初始化类构造函数。 GCC 引发错误,“类型‘foo’没有调用运算符。”这个伪代码应该解释我的意图。

class foo {  
    type arg1, arg2;
    foo (type _arg1, type _arg2) {  
        _arg1=arg1;  
        _arg2=arg2;  
    }  
}

class foo2 {  
    foo member;

    foo2(type _arg1, type _arg2) {  
        member(_arg1, _arg2);  
    }  
}

I'm trying to initialize a class constructor within another constructor. The GCC raises the error, 'Type 'foo' does not have a call operator.'This psuedo-code should explain my intentions.

class foo {  
    type arg1, arg2;
    foo (type _arg1, type _arg2) {  
        _arg1=arg1;  
        _arg2=arg2;  
    }  
}

class foo2 {  
    foo member;

    foo2(type _arg1, type _arg2) {  
        member(_arg1, _arg2);  
    }  
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

好菇凉咱不稀罕他 2024-11-10 09:25:27

两个问题:

首先,您的 foo 构造函数应该是公共的,如 Mark 的回答中所述。

其次,要使用其构造函数初始化成员,应使用以下语法:

foo2(type _arg1, type _arg2) :
   member(_arg1, _arg2)
   { /* code */ }  

Two issues:

First, your foo constructor should be public, as stated in Mark's answer.

Second, to initialize the member with its constructor, you should use the following syntax:

foo2(type _arg1, type _arg2) :
   member(_arg1, _arg2)
   { /* code */ }  
惜醉颜 2024-11-10 09:25:27

你的构造函数不是公开的;默认情况下,类中的所有内容都是私有的,除非您另外指定。我不确定这是否能解释您的确切错误消息。

Your constructors are not public; by default, everything in a class is private unless you specify otherwise. I'm not sure this explains your exact error message though.

故笙诉离歌 2024-11-10 09:25:27

您需要初始值设定项列表:

foo2(type _arg1, type _arg2) : member(_arg1,_arg2) { }

You want the initializer list:

foo2(type _arg1, type _arg2) : member(_arg1,_arg2) { }
浅忆流年 2024-11-10 09:25:27

您正在尝试使用 member 的构造函数。您应该在初始化列表中而不是在构造函数主体中执行此操作,即:

foo2(type _arg1, type _arg2)
    : member(_arg1, _arg2)
{  
}  

You're trying to use member's constructor. You should do that in the initializer list and not in the constructor body, i.e.:

foo2(type _arg1, type _arg2)
    : member(_arg1, _arg2)
{  
}  
心欲静而疯不止 2024-11-10 09:25:27

伪代码可以解释您的意图,但它不能解释您的错误,因为它不会按照您描述的方式出错:

class foo {  
    type arg1, arg2;
    foo (type _arg1, type _arg2) {  
        _arg1=arg1;  
        _arg2=arg2;  
    }  
}

class foo2 {  
    foo member;

    foo2(type _arg1, type _arg2) {  
        member(_arg1, _arg2);  
    }  
}

尽管它确实产生了有用的诊断:

gcc -Wall junk.cc 
junk.cc: In constructor ‘foo2::foo2(int, int)’:
junk.cc:12:32: error: no matching function for call to ‘foo::foo()’
junk.cc:3:5: note: candidates are: foo::foo(int, int)
junk.cc:1:11: note:                 foo::foo(const foo&)
junk.cc:13:28: error: no match for call to ‘(foo) (int&, int&)’
junk.cc: At global scope:
junk.cc:14:5: error: expected unqualified-id at end of input

这表明您不应该在此处发布“类似”的代码,并且期待有用的答案。

The pseudo-code may explain your intention but it doesn't explain your error as it doesn't error in the way you describe:

class foo {  
    type arg1, arg2;
    foo (type _arg1, type _arg2) {  
        _arg1=arg1;  
        _arg2=arg2;  
    }  
}

class foo2 {  
    foo member;

    foo2(type _arg1, type _arg2) {  
        member(_arg1, _arg2);  
    }  
}

Although it does yield helpful diagnostics:

gcc -Wall junk.cc 
junk.cc: In constructor ‘foo2::foo2(int, int)’:
junk.cc:12:32: error: no matching function for call to ‘foo::foo()’
junk.cc:3:5: note: candidates are: foo::foo(int, int)
junk.cc:1:11: note:                 foo::foo(const foo&)
junk.cc:13:28: error: no match for call to ‘(foo) (int&, int&)’
junk.cc: At global scope:
junk.cc:14:5: error: expected unqualified-id at end of input

Which shows that you shouldn't post "sorta like" code here and expect useful answer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文