小编C.C*_*C.C的帖子

C:对内联函数的未定义引用

由于我的上一个问题因糟糕的代码风格和拼写错误而被关闭,我对其进行了审查并再次寻求帮助。

我正在尝试解析 PE 格式的 .exe 文件。这是我的代码的一部分

    #include "PE_resolve.h"
    #define SIZEOF_SECTION_HEADER 0x28

     /*load filebuffer into Imagebuffer*/
    int Read_2_ImageBuffer(void **p_filebuffer, void **p_Imagebuffer,long filesize);
    
    /*helper function*/
    inline void * Get_NT_POS(void **p_filebuffer);
    inline void * Get_FileHeader_POS(void **p_filebuffer);
    inline void * Get_Opt_FileHeader_POS(void **p_filebuffer);

    
    int main(){
        return 0;
    }

    int Read_2_ImageBuffer(void **p_filebuffer, void **p_Imagebuffer,long filesize){
       /*allocate memory for imagebuffer*/
       void *Opt_PE_Header = Get_Opt_FileHeader_POS(p_filebuffer); //THE ERROR LINE
       DWORD SizeOfImage = *(DWORD*) ((BYTE *)Opt_PE_Header + 0x38);
       *p_Imagebuffer = malloc(SizeOfImage);
        if(*p_Imagebuffer == NULL){
            printf("can't allocate enough heap memory\n");
            exit(EXIT_FAILURE); …
Run Code Online (Sandbox Code Playgroud)

c inline undefined-reference

2
推荐指数
1
解决办法
2498
查看次数

C++ 中运算符重载的困惑

我定义了一个类来包装原始指针,因此该指针可以自动删除。这是我的代码

#include <iostream>
class Entity
{
private:
    std::string e_name;
public:
    Entity():e_name("unknown"){}
    void whoami() {
        std::cout << e_name;
    }
};
class ScopePointer
{
private:
    Entity *_e;
public:
    ScopePointer(Entity *e) : _e(e) {}
    ~ScopePointer() { delete _e; }
    Entity *operator->() { return _e; }
};

int main(int argc, char *argv[])
{
    ScopePointer p(new Entity());
    p->whoami();
}
Run Code Online (Sandbox Code Playgroud)

它运作良好,但我完全不明白如何p->whoami();运作。我的意思是 ScopePointer 中的运算符 -> 重载应该像下面这样工作

p.operator->()->whoami();or p->->whoami();
Run Code Online (Sandbox Code Playgroud)

第一个->应该返回 Entity* ,下一个应该->返回类方法。为什么只有一个 -> 可以使其工作?

c++ pointers class operator-overloading

1
推荐指数
1
解决办法
192
查看次数