没有从 '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
您可能希望第一行只是创建本地对象。
有许多教程描述了堆和堆栈之间的区别。所以请查看它们
我觉得这应该很简单,但出于某种原因我无法让它工作。
我正在尝试创建一个 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
您可能希望第一行只是创建本地对象。 有许多教程描述了堆和堆栈之间的区别。所以请查看它们