无法将struct的向量转换为char *

时间:2016-10-11 09:48:02

标签: c++

None

我想将testArray强制转换为char *,以便我可以写入文件。为什么这个例子不起作用?我收到以下错误:

struct test{
    int x;
    float y;
    float array[100];
    test(){
        x = 0;
        y = 1.0;
        for(int i=0; i<100; i++){
            array[i] = i;
        }
    }
    void print(){
        std::cout << x << " " << y << std::endl;
        for(int i=0; i<100; i++){
            std::cout << i << " ";
        }
    }
};

    std::vector<test> testArray;
    testArray.push_back(test());

    reinterpret_cast<char*>(testArray.front()), 2 * sizeof(test);

编辑:

现在我有一个如何读取和编写复杂结构向量到文件的工作示例。

file.cpp:71: error: invalid cast from type '__gnu_cxx::__alloc_traits<std::allocator<test> >::value_type {aka test}' to type 'char*'
     reinterpret_cast<char*>(testArray.front()), 2 * sizeof(test);
                                              ^

1 个答案:

答案 0 :(得分:2)

front()会返回对const的第一个元素的vector引用,因此其类型为struct test。如果没有自定义类型转换运算符,则无法将struct强制转换为指针。

您可以使用constfront()的{​​{1}}指针,也可以改为取消引用地址data()

begin()

取消引用auto x = reinterpret_cast<char*>(&(*testArray.begin())); cout << (void*)x << endl; 可以避免抛弃begin() -

Demo.