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

Fra*_*eza 2 pointers c++11

我熬夜试图解决这个问题(现在是早上7点,我在......).

我无法将实例化对象的地址设置为指针.这是主要功能:

#include "position_vector.h"
int main(){
    PositionVector res = PositionVector(10);
    PositionVector * ptr;
    ptr = &res;                   // <--- WHERE IT BREAKS
}
Run Code Online (Sandbox Code Playgroud)

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);
};
Run Code Online (Sandbox Code Playgroud)

我有另一个cpp文件,它定义了类中的所有方法.

这是一些更大的代码集的一部分,但这里的编译失败了:

g++-4.9 -std=c++11 -Werror -Wall -Wextra -g -Isrc -ggdb  -c -o bin/main.o src/main.cpp
Run Code Online (Sandbox Code Playgroud)

它失败并出现错误:

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;
         ^
Run Code Online (Sandbox Code Playgroud)

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

Jen*_*ens 7

operator&的班级超载了:

class PositionVector {
        // ...
        PositionVector & operator & ();
};
Run Code Online (Sandbox Code Playgroud)

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

  • 另外,如果你真的想把它作为运算符返回类型,你可以使用`std :: addressof`来获取指针. (3认同)