2011-05-06 144 views
1

非const引用的無效初始化我已經只是從C++開始,因爲我想將我的raytracer從Python轉換爲C++。類型'std :: vector <Object*>&'&'&'

不管怎麼說,我試圖編譯我的光線跟蹤與g++,我得到這個錯誤:

In file included from engine.cpp:10:0: 
objects.cpp: In function ‘Vector Trace(Ray&, std::vector<Object*>&, float, int)’: 
objects.cpp:97:30: error: conversion from ‘Object*’ to non-scalar type ‘Object’ requested 
objects.cpp:110:29: error: conversion from ‘Object*’ to non-scalar type ‘Object’ requested 
engine.cpp: In function ‘int main(int, char**)’: 
engine.cpp:36:55: error: invalid initialization of non-const reference of type ‘std::vector<Object*>&’ from an rvalue of type ‘std::vector<Object*>*’ 
objects.cpp:86:8: error: in passing argument 2 of ‘Vector Trace(Ray&, std::vector<Object*>&, float, int)’ 

我知道所有的這些錯誤都圍繞着我的objects變量,因爲我真的不知道怎麼樣創建對象數組並在函數內正確使用它。

這裏是我的main()的一部分:

vector<Object*> objects; 

Sphere sphere = Sphere(); 
sphere.pos = Vector(0, 0, 0); 
sphere.radius = 1; 
sphere.diffuse = Vector(1, 1, 1); 

objects.push_back(&sphere); 

Trace()減速:

Vector Trace(Ray &ray, vector<Object*> &objects, float roulette, int n = 0) { 

Sphere聲明,像這樣:

class Sphere: public Object { 
    public: 

我真的不知道是什麼做,因爲我已經嘗試調整幾乎每一個關於那vector<>事情!

編輯

這裏的線:

Object target = objects[i]; 

回答

3

你不包括有問題的線路。

objects.cpp:97你正在做這樣的事情:

Object x = objects[0]; 

這是行不通的,因爲objectsObject *

使用例如向量其中之一:

Object * x = objects[0]; // x points to the actual Object in your vector 
Object x = *objects[0]; // x is a copy of the Object in your vector 
Object & x = *objects[0]; // x is a reference to/alias of the actual Object in your vector 

在第二個錯誤,你試圖通過一個vector<Object*> *其中vector<Object*>預期。不要通過&objects而只是objects

+0

'Object target = * objects [i];'修正了那個錯誤,謝謝!現在,只有'Trace()'函數保留。 GCC不喜歡我的'vector <>'參數...... – Blender 2011-05-06 16:26:08

+0

@Blender:錯誤很可能是您將'&objects'傳遞給Trace - 刪除了'&' – Erik 2011-05-06 16:26:58

+0

IT WORKS !!!!我必須弄清所有'*'和'&'事情。謝謝! – Blender 2011-05-06 16:28:36

相關問題