我熬夜试图解决这个问题(现在是早上7点我在......)。
我无法将实例化对象的地址设置为指针。这是主要功能:
#include "position_vector.h"
int main(){
PositionVector res = PositionVector(10);
PositionVector * ptr;
ptr = &res; // <--- WHERE IT BREAKS
}
h文件“position_vector.h”的精简版:
#include<iostream>
typedef uint32_t word_t;
class PositionVector {
public:
word_t * vec;
/*some other member variables */
PositionVector();
PositionVector(size_t len);
PositionVector & operator & ();
PositionVector & operator !();
~PositionVector();
/*some other member functions*/
void resize(size_t len);
};
我有另一个cpp文件,它定义了类中的所有方法。
这是一些更大的代码集的一部分,但这里的编译失败了:
g++-4.9 -std=c++11 -Werror -Wall -Wextra -g -Isrc -ggdb -c -o bin/main.o src/main.cpp
失败并显示错误:
g++-4.9 -std=c++11 -Werror -Wall -Wextra -g -Isrc -ggdb -c -o bin/main.o src/main.cpp
src/main.cpp: In function ‘int main()’:
src/main.cpp:27:9: error: cannot convert ‘PositionVector’ to ‘PositionVector*’ in assignment
ptr = &res;
^
我一定会错过一些超级基本的东西,但我只是拉了一个更好的东西,我必须跑去工作......所以我真的不能再充分考虑了。
答案 0 :(得分:7)
您已经在课堂上重载了operator&
:
class PositionVector {
// ...
PositionVector & operator & ();
};
当您尝试获取地址时,编译器会调用重载的成员函数,该函数返回PositionVector&
。这不能分配给PositionVector*
,因此您会收到错误。