c++ 不存在合适的构造函数,无法从“block [0]”转换为“block”[closed]

t1rydlwq  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(158)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
22小时前关闭
Improve this question
我试图返回一个列表,并将列表设置为SCR_StrPack(),但它给了我两个错误

#include <iostream>
#include <windows.h>
using namespace std;
int SCR_X = 40;
int SCR_Y = 110;
struct block {
    char DISPLAY = ' ';
    int TYPE = 0;
    float DESTRUCTION = 1.0f;
};
void SCR_Gen(block blck[]) {
    for(int i=0; i<sizeof(blck); i++) {
        cout << blck[i].DISPLAY;
    }
}
block SCR_StrPack(const char STR[]) {
    block blocks[] = {};
    for(int i=0; i<sizeof(STR); i++) {
        blocks[i].DISPLAY = STR[i];
    }
    return blocks;
}
int main() {
    block tr[20] = {};
    tr = SCR_StrPack("\"\"aaa\"\"");
    SCR_Gen(tr);
    return 0;
}

我在考虑使用for循环,但它是一次性的,我不想每次都重新输入它,只是为了大量修改列表中的某些内容。

ldioqlga

ldioqlga1#

你不能返回数组,也不能使用sizeof(STR)来获取字符串的长度。当传递给函数时,字符串会衰减为指向第一个元素的指针,因此sizeof(STR)将始终是该指针的大小。
你可以使用一个std::vector<block>来存储你的block,你也可以使用一个std::string_view来获取字符串的大小。
示例:

#include <iostream>
#include <string_view>
#include <vector>

struct block {
    char DISPLAY = ' ';
    int TYPE = 0;
    float DESTRUCTION = 1.0f;
};

void SCR_Gen(const std::vector<block>& blck) {
    for (std::size_t i = 0; i < blck.size(); i++) {
        std::cout << blck[i].DISPLAY;
    }
}

std::vector<block> SCR_StrPack(std::string_view STR) {
    std::vector<block> blocks(STR.size());
    for (std::size_t i = 0; i < STR.size(); i++) {
        blocks[i].DISPLAY = STR[i];
    }
    return blocks;
}

int main() {
    // using a raw string literal is simpler than adding a lot of backslashes:
    auto tr = SCR_StrPack(R"(""aaa"")");
    SCR_Gen(tr);
    return 0;
}

你也可以使用基于范围的for-循环。例如:

void SCR_Gen(const std::vector<block>& blck) {
    for(auto& blk : blck) {
        std::cout << blk.DISPLAY;
    }
}

相关问题