我整夜熬夜试图弄清楚这一点(现在是我现在早上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;
^
我一定错过了一些超级基础的东西,但是我整夜都没睡,所以我不得不跑去上班...所以我再也想不起来了。
最佳答案
您已经在课程中超载了operator&
:
class PositionVector {
// ...
PositionVector & operator & ();
};
当您尝试获取地址时,编译器将调用您的重载成员函数,该函数返回
PositionVector&
。不能将其分配给PositionVector*
,因此会出现错误。