无法将对象转换为指针C ++

时间:2016-05-04 11:32:05

标签: pointers c++11

我熬夜试图解决这个问题(现在是早上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;
         ^

我一定会错过一些超级基本的东西,但我只是拉了一个更好的东西,我必须跑去工作......所以我真的不能再充分考虑了。

1 个答案:

答案 0 :(得分:7)

您已经在课堂上重载了operator&

class PositionVector {
        // ...
        PositionVector & operator & ();
};

当您尝试获取地址时,编译器会调用重载的成员函数,该函数返回PositionVector&。这不能分配给PositionVector*,因此您会收到错误。

相关问题