基本上,我有一个 .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/