C++ 向量的静态初始化w/结构w/字符缓冲区[] #包括 #包括 #包括 // //g++(Ubuntu 7.4.0-1ubuntu1~18.04.1)7.4.0 // //错误: // //vectorInit StackFault.cpp:10:32:错误:无法从 //“”到“std::vector” //向量VN1={{“a”,“d”}; // 结构{ uint8_t b_1[2]; uint8_t b_2[2]; }; 向量VN1={{“a”,“d”}; 内部主(空){ 用于(自动n:VN1) std::cout

C++ 向量的静态初始化w/结构w/字符缓冲区[] #包括 #包括 #包括 // //g++(Ubuntu 7.4.0-1ubuntu1~18.04.1)7.4.0 // //错误: // //vectorInit StackFault.cpp:10:32:错误:无法从 //“”到“std::vector” //向量VN1={{“a”,“d”}; // 结构{ uint8_t b_1[2]; uint8_t b_2[2]; }; 向量VN1={{“a”,“d”}; 内部主(空){ 用于(自动n:VN1) std::cout,c++,char,buffer,structure,C++,Char,Buffer,Structure,您正在使用const char数组而不是unit8\t初始化向量。 这应该起作用: #include <stdint.h> #include <iostream> #include <vector> // // g++ (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 // // ERROR: // // vectorInit-StackFault.cpp:10:32: error: could not convert ‘{{"a"

您正在使用
const char
数组而不是
unit8\t
初始化向量。 这应该起作用:

#include <stdint.h>
#include <iostream>
#include <vector>

//
// g++ (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
//
// ERROR:
//
// vectorInit-StackFault.cpp:10:32: error: could not convert ‘{{"a", "d"}}’ from
// ‘<brace-enclosed initializer list>’ to ‘std::vector<N>’
// std::vector<N> VN1 = {{"a","d"}};
//
struct N {
    uint8_t b_1[2];
    uint8_t b_2[2];
};

std::vector<N> VN1 = {{"a","d"}};

int main(void) {
    for (auto n : VN1)
        std::cout << n.b_1 << std::endl;

    return 0;
}
std::vector VN1={{'a','d'};

这将仅初始化
b_1

假设
uint8_t
无符号字符的别名(该假设应适用于该系统),您显示的程序应该是格式良好的。它使用clang和msvc编译。这可能是一个GCC错误。和/或可能是同一错误的报告

您可以通过使用大括号内的初始化器而不是字符串文字来解决编译器错误:

std::vector<N> VN1 = {{'a','d'}};
std::vector VN1={{
{'a','\0'},
{b','\0'},
}};
std::vector VN1={{{'a','b'},{'c','d'}};

std::cout
“a”
是一个
常量字符[2]
,而不是一个
uint8\u t[2]
。谢谢,这是我想到的最好的方法,似乎我不能在结构中简单地用“a”来表示字符a[2]。
std::vector<N> VN1 = {{
    {'a', '\0'},
    {'b', '\0'},
}};
std::vector<N> VN1 = {{{'a','b'},{'c','d'}}};

std::cout << "output: " << VN1[0].b_1[0] << " " << VN1[0].b_1[1] << " " << VN1[0].b_2[0] << " " << VN1[0].b_2[1] << std::endl;