숙제에 대한 해결책을 찾는 데 어려움이 있습니다. 여기에 내가 뭘하려고하는지 : 나는 벡터로 저장된 객체들의 목록을 가지고있다. "AvailableObjects"라는 벡터가 전역 적으로 선언됩니다.함수 Const 포인터의 벡터에서 생성 된 포인터를 반환하는 중
vector<const Object*> AvailableObjects;
...
void read_obj_file(const char* filename){
ifstream infile (filename, ios::in);
while(!infile.eof()) {
char name[20];
int attribute;
int size = 0;
infile >> name >> attribute >> size;
AvailableObjects.push_back(new Object(name, attribute, size));
}
infile.close();
return;
}
개체를 읽은 후, 나는 하나의 객체를 생성하는 함수를 작성하고, 사용자가 사용할 수있는 개체의 스택에 그것을 밀어해야합니다.
Object* generate_object(){
return AvailableObjects.at(rand_in_range(1,AvailableObjects.size()));
}
위의 코드는 내가 원했던 코드입니다. 무작위로 벡터에 저장된 객체 중 하나를 선택하고 그 객체의 포인터를 그 함수를 호출 한 곳으로 되 돌리는 것이 필요하다. 그러나 벡터의 객체는 const Object *가 아니고 단순 Object *가 아니기 때문에 수행 할 수 없습니다. 이것은 과제물이므로 const 값을 수정할 수 없으므로 프로토 타입은 동일하게 유지되어야합니다. 마지막으로, 나는 객체 클래스를 공유 할 것이다. Construct Object *를 전달할 때 새 객체를 만드는 데 사용되는 생성자가 있지만 생성자가 의도 한대로 작동하도록 만들 수는 없습니다.
/**
* object.h
*
* Objects are immutable (read-only) once instantiated.
*/
#ifndef OBJECT_H
#define OBJECT_H
#include<string>
using std::string;
class object{
private:
string _name;
int _attribute;
int _size;
public:
// Constructor
Object(string name, int attribute, int size){
_name = name;
_attribute = attribute;
_size = size;
}
Treat(const Treat& t){
_name = t._name;
_attribute = t._attribute;
_size = t._size;
}
// Accessors
string name() const {return _name;}
int attribute()const {return _attribute;}
int size() const {return _size;}
};
#endif
여기에 또한 특정 범위에서 임의의 숫자를 선택하는 코드 전체에 표시되는 기능입니다.
모든 응답을 주셔서 감사 드리며, 적극적으로이를 관찰 할 것입니다. 질문이 있으시면 기꺼이 답변 해 드리겠습니다. 다시 요약하자면, generate_object 함수를 사용하여 const Object * 벡터를 사용하여 Object *를 반환하는 데 도움이 필요합니다.
보조 노트 : 우리가 AvailableObjects에서 다섯 번째 객체의 전체 복사본을 만들고 싶었다 예를 들어, 우리가 할 것이라고 생성자를'클래스 object' 및 Object''라는 생성자를 복사'Treat' 원 정확하게 컴파일하기 시작하는 것도 아닙니다. 그것에 관한 답변을 원하시면 ** 유효한 코드 **를 게시하십시오. – WhozCraig