没有从'Class *'到'Class' C++的可行转换
No viable conversion from 'Class *' to 'Class' C++
我觉得这应该很简单,但无论出于什么原因,我都无法让它发挥作用。
我正在尝试创建一个类的实例,该实例可以被传递到其他函数中并由其他函数直接编辑。
例如:
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
您可能想要第一行只是为了创建本地对象。有许多教程描述了堆和堆栈之间的区别。。所以检查一下
相关文章:
- 无法将'Class::operator=='从"布尔"类型(类::)(类*)转换为"布尔"类型
- 'return':无法从'const class myClass'转换为'class myClass &'
- VS2017模板专用化错误无法从'Class *(__cdecl *)(Args...)'转换为'Class *(__cdecl *)(Args...)'
- "class<T>"到"class<const T>"转换运算符的惯用方法
- 通过在每个元素上调用名称(),将类的向量转换为clangtype(class :: name())的向量
- 没有从'Class *'到'Class' C++的可行转换
- 将 BOUNDED std::参数列表<class>转换为类型 std::tuple<class,class,class> tup<classObj1, classObj
- 无法将"member pointer to derived class"转换为"member pointer to base class"
- 无法将参数 1 从 'Class *' 转换为'double []'
- 如何在C ++文件中使用".class"或".jar" Java文件(无需转换)?
- 如何将以下"class reference"机制从德尔福转换为C++11?
- 在没有c风格强制转换的情况下,将DWORD_PTR强制转换为class,反之亦然
- 无法将此指针从 const Class<T> 转换为 Class<T>&
- 是否可以使作用域枚举("enum class")在上下文中可转换为布尔值?
- C++ 代码错误(非法成员初始化、'class'类型重定义、'return':无法转换)
- 将' class '指针强制转换为' float '数组:它是如何工作的?
- 如何从type (Class)转换为std:string
- 不能将int {Class}::*转换为int*
- 如何将char*转换为Class类型?
- 如何将const Class*转换为Class* ?