【问题标题】:error: reference to type 'const ItemInstance' could not bind to an rvalue of type 'void'错误:对“const ItemInstance”类型的引用无法绑定到“void”类型的右值
【发布时间】:2020-09-01 02:14:17
【问题描述】:

我尝试在 iOS 版本的 MinecraftPE 中添加配方,但出现此错误。我该怎么办?

错误:对“const ItemInstance”类型的引用无法绑定到“void”类型的右值 ..._inst->iteminstance(_inst, Item::mItems[432], 0), "###", "#S#", "###", d... 注意:在此处将参数传递给参数“inst” void Recipes::addShapedRecipe(Recipes* res, const ItemInstance& inst, co...

源码在这里:

调整.xm

#import "../substrate.h"
#import <UIKit/UIKit.h>
#import <mach-o/dyld.h>
#import <initializer_list>
#import <vector>
#import <map>
#import <mach-o/dyld.h>
#import <string>
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <initializer_list>
#import <vector>
#import <mach-o/dyld.h>
#import <UIKit/UIKit.h>
#import <iostream>
#import <stdio.h>
#include <sstream>
#include <sys/sysctl.h>
#include <net/if.h>
#include <net/if_dl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <algorithm>
#include <fstream>
#include <ifaddrs.h>
#include <stdint.h>
#include <dlfcn.h>

#include "Item.h"
#include "ItemInstance.h"
#include "Recipes.h"

ItemInstance* _inst = NULL;

void (*ItemInstance::iteminstance_)(ItemInstance*, Item const*, int);
void ItemInstance::iteminstance(ItemInstance* inst, Item const* item, int meta) {
    _inst = inst;

    iteminstance_(inst, item, meta);
}

void (*Recipes::addShapedRecipe_)(Recipes* res, const ItemInstance& inst, const std::string& s1, const std::string& s2, const std::string& s3, const std::vector<Recipes::Type, std::allocator<Recipes::Type>>& ress);
void Recipes::addShapedRecipe(Recipes* res, const ItemInstance& inst, const std::string& s1, const std::string& s2, const std::string& s3, const std::vector<Recipes::Type, std::allocator<Recipes::Type>>& ress) {
    addShapedRecipe_(res, inst, s1, s2, s3, ress);
}

void (*Recipes::_init_)(Recipes* res);
void Recipes::_init(Recipes* res) {
    Recipes::_init_(res);

    const std::vector<Recipes::Type, std::allocator<Recipes::Type>>& def = definition<Item*, Item*>('#', Item::mItems[296], 'S', Item::mItems[368]);

    res->addShapedRecipe(res, _inst->iteminstance(_inst, Item::mItems[432], 0), "###", "#S#", "###", def);
}

%ctor {
    MSHookFunction((void*)(0x1007569a4 + _dyld_get_image_vmaddr_slide(0)), (void*)&ItemInstance::iteminstance, (void**)&ItemInstance::iteminstance_);
    MSHookFunction((void*)(0x100781d74 + _dyld_get_image_vmaddr_slide(0)), (void*)&Recipes::addShapedRecipe, (void**)&Recipes::addShapedRecipe_);
    MSHookFunction((void*)(0x100774f40 + _dyld_get_image_vmaddr_slide(0)), (void*)&Recipes::_init, (void**)&Recipes::_init_);
    MSHookFunction((void*)(0x1012ae238 + _dyld_get_image_vmaddr_slide(0)), (void*)&Item::mItems, NULL);
}

食谱.h

#pragma once

#include <memory>
#include <string>
#include <vector>
#include <stdint.h>

#include "ItemInstance.h"

class Recipes {
public:
    class Type {
    public:
        Item* item;
        uintptr_t* block;
        ItemInstance inst;
        char c;
    };
public:
    static void (*_init_)(Recipes* res);
    static void _init(Recipes* res);

    static void (*addShapedRecipe_)(Recipes* res, const ItemInstance& inst, const std::string& s1, const std::string& s2, const std::string& s3, const std::vector<Recipes::Type, std::allocator<Recipes::Type>>& ress);
    static void addShapedRecipe(Recipes* res, const ItemInstance& inst, const std::string& s1, const std::string& s2, const std::string& s3, const std::vector<Recipes::Type, std::allocator<Recipes::Type>>& ress);
};

ItemInstance.h

#pragma once

#include <memory>

#include "Item.h"

class ItemInstance {
public:
    static void (*iteminstance_)(ItemInstance*, Item const*, int);
    static void iteminstance(ItemInstance* inst, Item const* item, int meta);
};

项目.h

#pragma once

#include <string>
#include <memory>
#include <vector>
#include <unordered_map>

class Item {
public:
    char filler[200];
public:
    static Item* mItems[512];
};

【问题讨论】:

  • 您复制的...s 隐藏了错误。某处是否有未删节的输出?
  • 我该怎么办?大概修复你的代码。您有一个 void 方法 ItemInstance::iteminstance,并且您将其返回值传递给另一个方法调用 res-&gt;addShapedRecipe()。由于 void 方法没有返回值,因此这是一个错误。你应该如何解决它,我不知道。你为什么首先尝试使用 void 方法的返回值?
  • 旁白:const std::vector&lt;Recipes::Type, std::allocator&lt;Recipes::Type&gt;&gt;&amp; def 应该是 std::vector&lt;Recipes::Type&gt; def 或者只是 auto def
  • ... 不变。

标签: c++ c++11 jailbreak objective-c++ cydia


【解决方案1】:

要修复编译错误,您需要传递*_inst,而不是_inst-&gt;iteminstance(_inst, Item::mItems[432], 0)

这并不能帮助您确保在调用 Recipes::_init 之前已填充 _inst

大概您对ItemInstance 的定义与您的钩子拦截的定义不匹配,因此您对Recipes::Type 的定义也不匹配。去找到正确定义这些的地方。

【讨论】:

    猜你喜欢
    • 2020-05-08
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2021-07-19
    • 1970-01-01
    相关资源
    最近更新 更多