没有可行的从"Class*"到"Class"C++的转换

Ale*_*lex 7 c++ reference class

我觉得这应该很简单但无论出于什么原因我都无法让它发挥作用.

我正在尝试创建一个类的实例,可以传递给其他函数并直接编辑.

例如:

main()
{
    ClassFoo foo = new ClassFoo();
    someFunction(foo);
}

void someFunction(ClassFoo& f)
{
    f.add("bar");
}
Run Code Online (Sandbox Code Playgroud)

问题是,在编译时,我最终会遇到此错误.

no viable conversion from 'ClassFoo *' to 'ClassFoo'
    ClassFoo foo = new ClassFoo();
             ^    ~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

它还说其他候选构造函数不可行,但是在我的ClassFoo类中我确实有一个如下所示的构造函数:

ClassFoo::ClassFoo()
{}
Run Code Online (Sandbox Code Playgroud)

那么我怎样才能ClassFoo在函数中完成变量的编辑?

aru*_*nte 13

C++不是Java(或者我认为是C#).new除非您知道需要,否则不应使用关键字.它返回一个指向新创建的类的指针,因此会出现错误.可能,以下就足够了:

Class foo;
someFunction(foo);
Run Code Online (Sandbox Code Playgroud)

对于默认的构造对象,你不应该包含()你不使用的new东西,因为这会做一些完全不同的东西(参见最令人烦恼的解析)


小智 5

您可能已经习惯了C#或类似的sintax。

但是,在C ++中,这些行之间存在很大的差异:

ClassFoo foo; //local variable at stack
ClassFoo *foo = new ClassFoo(); //local pointer to some memory at heap which is structured like ClassFoo
Run Code Online (Sandbox Code Playgroud)

您可能只需要第一行来创建本地对象。有很多描述堆和栈之间区别的教程。