c++ - 当我尝试打印 vector 的内容时编译器出错?

标签 c++ templates vector

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

#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>&&

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

最佳答案

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

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

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

关于c++ - 当我尝试打印 vector 的内容时编译器出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31062800/

相关文章:

c++ - Poco C++ 库是否支持位置命令行参数?

c++ - VS2010 C++成员模板函数特化错误

c++ - 如何在函数typedef中使用result_of

C++ 可变参数委托(delegate)

c++ - 我可以使用与静态数组具有相同功能的 vector 吗?

c++ - 在 C++ vector 的每个元素上调用函数

c++ - 如果内存稀疏并且我不打算调整大小,我应该使用 std::vector of std::unique_ptr<T[]>

c++ - 初始化程序错误太多

javascript - 在 AngularJS Controller 内的循环中渲染和注入(inject)动态模板

c++ - 文字 0 和 0 作为变量如何通过函数 __builtin_clz 产生不同的行为?