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

No viable conversion from 'Class *' to 'Class' C++

我觉得这应该很简单,但出于某种原因我无法让它工作。

我正在尝试创建一个 class 的实例,它可以被其他函数直接传递和编辑。

例如:

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

void someFunction(ClassFoo& f)
{
    f.add("bar");
}

问题是,在编译时,我遇到了这个错误。

no viable conversion from 'ClassFoo *' to 'ClassFoo'
    ClassFoo foo = new ClassFoo();
             ^    ~~~~~~~~~~~~~~~

它还说其他候选构造函数不可行,但是在我的 ClassFoo class 中,我确实有一个看起来像这样的构造函数:

ClassFoo::ClassFoo()
{}

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

C++ 不是 Java(或者我想是 C#)。你不应该使用 new 关键字,除非你 know that you need to。它 returns 指向新创建的 class 的指针,因此会出现错误。可能,以下内容就足够了:

Class foo;
someFunction(foo);

对于默认构造的对象,如果您不使用 new,则不应包含 (),因为这会做一些完全不同的事情(请参阅 the most vexing parse

您可能已经习惯了 C# 或类似的语法..

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

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

您可能希望第一行只是创建本地对象。 有许多教程描述了堆和堆栈之间的区别。所以请查看它们