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

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

本文关键字:Class 转换 C++      更新时间:2023-10-16

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

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

例如:

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变量呢?

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

Class foo;
someFunction(foo);

对于默认构造的对象,如果不使用new,则不应包含(),因为这会做一些完全不同的事情(请参阅最令人烦恼的解析)

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

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