尝试将指针复制到列表,出现"cannot convert ... to ... in initialization"错误
Trying to copy the pointer to a list, getting "cannot convert ... to ... in initialization" error
我希望我的Bullet类能够访问Ship的列表,所以我有一个静态变量,它是指向列表对象的指针。
class Bullet {
...
static list<Ship*>* enemyList;
...
}
申报名单,
std::list<Ship*> enemyList;
最后,我提供了我的静态变量的定义:
std::list<Ship*>* Bullet::enemyList = &enemyList;
但是,编译器会给出以下错误:
error: cannot convert `std::list<Ship*, std::allocator<Ship*> >**' to `std::list<Ship*, std::allocator<Ship*> >*' in initialization|
通过将我的定义更改为以下内容,当调用需要列表的函数时,程序会编译但segfault:
std::list<Ship*>* Bullet::enemyList = enemyList; //no &
这让我相信我对std::list的理解和使用有错误,但我不确定那是什么。谢谢!
编辑:已解决
正如Matt McNabb在下面指出的,右侧的enemyList
std::list<Ship*>* Bullet::enemyList = &enemyList;
引用了左手边的enemyList,而不是我想在类外调用的enemyList。使用不同的名称解决了这个问题。
首先听起来像是你想要的:
static list<Ship> enemyList;
目前还不清楚你为什么希望指针参与其中。如果你使用这个表格,那么你所有的其他问题都会变得毫无意义,但无论如何都要回答:
这句话毫无意义:
std::list<Ship*>* Bullet::enemyList = &enemyList;
您正在尝试初始化列表以指向其自身,这是不可能的(因为列表包含Ship*
,而不是list<Ship*>
)。声明将是:
list<Ship*> *Bullet::enemyList;
并且您还必须使该指针指向某个位置(默认情况下,它将是一个空指针)。
你的第二个版本编译了,但它就像写:
int x = x;
希望你能理解为什么这是个问题。
相关文章:
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- "Cannot convert Python object argument to type '<typename>'" - 使用 Cython 包装 C++ 类时出错
- 我一直收到错误"cannot convert 'float*' to 'float' in return"
- 地图'Cannot convert from _Ty2 to T*'错误
- 将 2D 数组插入 std::vector 时"cannot convert from 'const GLfloat [12]' to '_Objty'"错误消息
- 如何修复C++中的'cannot convert char to char*'错误?
- 返回"Cannot convert from 'std::ofstream {aka std::basic_ofstream<char>}' to bool"错误
- 列表插入"Cannot convert argument from Class<T>* to Class<T> &&"
- "Cannot convert parameter 1 from double to float"虽然没有更改参数
- C++ 中的错误" cannot convert node to node* "
- "cannot convert argument 1 from 'Node<T>' to 'std::nullptr_t"编译器错误
- 如何修复C++编译器错误"cannot convert 'Type' to 'const Type*'"?
- C++问题"cannot convert argument 1 from 'int [5]' to 'int'"
- 了解错误"error: cannot convert ‘char**’ to ‘const char*’ for argument ‘1’ to ‘double atof(const char*)’"
- 尝试使用标记调度失败:"cannot convert from bool to std::true_type"
- 如何修复此错误错误"error C2440: '=' : cannot convert from 'int (*)[]' to 'int *' "?
- c++ 修改驱动程序,出现"cannot convert from overloaded function"错误
- "cannot Convert vector<int>* to int"是什么意思?
- wcstombs_s "Cannot convert argument" DirectX-11
- QObject::connection(const QObject*, const char*, const char*, Qt::ConnectionType) "Cannot convert ar