我整夜熬夜试图弄清楚这一点(现在是我现在早上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*,因此会出现错误。

07-27 18:09