当我尝试打印向量的内容时,编译器会出错?

时间:2015-06-26 00:04:42

标签: c++ templates vector

基本上,我有一个.h文件,其中我定义了一个函数来生成一个元素缓冲区和压缩顶点列表(对于OpenGL)给定一个未优化的顶点列表。我遇到了一些问题,事实证明我实际上无法访问传递给方法的向量内容。我的代码如下

#ifndef LEARNOPENGL_COMMON_H
#define LEARNOPENGL_COMMON_H

#include "ContextBase.h" // this includes all the OpenGL stuff
#include "vector"
#include "iostream"

class common {
public:

    template<typename V>
    static bool are_equal(int size, V* v1, V* v2) {
        for (int x = 0; x < size; x++) {
            //if (v1[x] != v2[x]) return false;
        }
        return true;
    }

    template<typename V, typename E>
    static void GenOptimizedArrays(const int vertex_size, std::vector<V>* vertex_source,
                                   std::vector<V>* vertex_out, std::vector<E>* ebo_out) {

        std::vector<V> * vertex_vector = new std::vector<V>();
        std::vector<E> * element_vector = new std::vector<E>();

        std::cout << vertex_source[0] << std::endl;
    }
};

#endif //LEARNOPENGL_COMMON_H

但是,我的编译器告诉我,尝试打印(访问?)vertex_source[0]导致错误 - 确切的(相关的)错误消息是

error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}
’ lvalue to ‘std::basic_ostream<char>&&

我尝试在网上搜索,但是,虽然我发现了类似的问题,但是所有内容只是说使用迭代器而不解释为什么我从解决方案中找出了解决方法,但没有找到好的解释。你能帮上忙吗?

1 个答案:

答案 0 :(得分:0)

std::vector<int> *vec = new vector<int>;
//std::cout<<vec[0];(1)
std::cout<<&vec[0];(2)

如果您取消注释(1)并运行上面的代码段,您将得到几乎相同的错误。变量vec仅知道其地址,除非您将数据分配到其指针位置。因此,当您尝试从其指针位置访问数据时,系统无法将其与流绑定。

如果您尝试按(2)所示打印地址,则会打印位置变量vec知道的地址。