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

时间:2015-03-19 02:37:49

标签: c++ class reference

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

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

例如:

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类中,我确实有一个看起来像这样的构造函数:

ClassFoo::ClassFoo()
{}

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

2 个答案:

答案 0 :(得分:9)

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

Class foo;
someFunction(foo);

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

答案 1 :(得分:4)

你可能已经习惯了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

您可能只想创建本地对象的第一行。 有许多教程描述堆和堆栈之间的区别..所以检查它们