Я пытаюсь создать пустой вектор структур. Я буду добавлять элементы во время выполнения с помощью push_back ().
Общая структура - это отдельный класс, имеющий вектор объектов Resource, и каждый объект Resource должен иметь этот структурный вектор pipe. Я не понимаю, почему это объявление не рассматривается как обычная переменная класса. В Resource. cpp подсказка vscode дает мне упоминание о распределителе. Я не знаю, что это такое, и не знаю, как это применимо.
Resource.h
#include <vector>
class Resource {
public:
int typeSize;
typedef struct PipelineSlot{
bool isBusy;
uint32_t busyCycle;
Instruction *occupiedBy;
} pls_t;
std::vector<pls_t> pipeline; //why doesn't this create a class variable?
static bool pushFU(Instruction* instr, int cycle, std::vector<Resource> &fuVector);
};
Ресурс. cpp
#include <Resource.h>
typedef struct PipelineSlot pls_t;
static bool pushFU(Instruction* instr, int cycle, std::vector<Resource> &fuVector) {
for (auto fu : fuVector) {
std::vector<pls_t> pipe = fu.pipeline; //IDE doesn't like this
if (fu.pipeline.size() > 0) {
if (fu.pipeline.back().busyCycle != cycle && fu.pipeline.size() < Resource::resourceLatency.find(fu.type)->second) {
pls_t newInstr {true, cycle, instr};
fu.pipeline.push_back(newInstr); //IDE doesn't like this
return true;
}
} else if (fu.pipeline.size() == 0) {
pls_t newInstr {true, cycle, instr};
fu.pipeline.push_back(newInstr); //IDE doesn't like this
return true;
}
}
return false;
}
Не уверен, что это актуально, но IDE имеет проблему только с вызовами push_back () не с другими векторными методами (чего я тоже не понимаю). Конечная цель состоит в том, чтобы иметь класс-класс структур, которые я могу изменить во время выполнения. Как мне этого добиться?
РЕДАКТИРОВАТЬ: VSCode дает мне эту подсказку, когда я наводю указатель мыши на push_back () линии:
no instance of overloaded function "std::vector<_Tp, _Alloc>push_back [with _Tp=Resource::pls_t, Alloc=std::allocator<Resource::pls_t]" matches the argument list -- argument types are: (pls_t) -- object type is: std::vector<Resource::pls_t, std::allocator<Resource::pls_t>>
Компилятор говорит мне об этом (множество таких ошибок):
error: ‘class Resource’ has no member named ‘pipeline’; did you mean ‘typeSize’?
if (fu.pipeline.size() > 0) { behavior
Примечание: я студент колледжа с фоном c, но ОЧЕНЬ новый с c ++.