0

我有一个名为 Model 的类,在 ypur .h 文件中我有这个:

private:
    vector<int> memory(MEMORY_SIZE);

MEMORY_SIZE 是定义标头中的常量,值为 10。

当我尝试编译时,我得到了这个错误代码

Model.h:33: error: ISO C++ forbids declaration of 'vector' with no type
Model.h:33: error: expected ';' before '<' token

我不知道为什么,我在声明向量的类型......


完整的头文件代码:

/*
 * Model.h
 *
 *  Created on: Sep 13, 2012
 *      Author: ademar
 */


#ifndef MODEL_H_
#define MODEL_H_

#include "Config.h"
#include "Arduino.h"
#include <vector>

class Model {

    public:
        Model(int pin, char command[]);
        Model(int pin, int initialState, char command[]);
        bool isChanged(int currentState);
        char* getCommand(void);
        int getState();
        void setRange(int range);
        void usesMemory();

    private:
        int pin;
        int state;
        int range;
        long time;
        char* command;
        void updateTime();
        bool useMemory;
        std::vector<int> memory;
};

#endif /* MODEL_H_ */

和 C++ 代码:

/*
 * Model.cpp
 *
 *  Created on: Sep 13, 2012
 *      Author: ademar
 */

#include "Model.h"

Model::Model(int pin, char command[]) {
    *this = Model(pin,0,command);
}

Model::Model(int pin, int initialState, char command[]) {
    this->pin = pin;
    this->state = initialState;
    this->command = command;
    this->range = 1;
    this->useMemory = false;
    this->updateTime();
}

void Model::usesMemory(){
    this->useMemory = true;
}

void Model::setRange(int range){
    this->range = range;
}

bool Model::isChanged(int currentState) {
    if ((currentState >= (this->state + this->range) || currentState <= (this->state - this->range)) && ((this->time+WAIT_CHANGE)<millis())){
        this->state = currentState;
        updateTime();
        return true;
    }
    return false;
}

char* Model::getCommand(){
    return this->command;
}

int Model::getState(){
    return this->state;
}

void Model::updateTime(){
    this->time = millis();
}

和错误:

In file included from Honda.h:11,
             from Honda.cpp:8:
Model.h:33: error: ISO C++ forbids declaration of 'vector' with no type
Model.h:33: error: invalid use of '::'
Model.h:33: error: expected ';' before '<' token
4

1 回答 1

1

这些是我拍摄的未包含矢量或您缺少命名空间的照片std::。编译器明确指出它不知道向量是什么。

更重要的是,您不会在C++中初始化这样的字段。您必须在构造函数中执行此操作:

#include <vector>
#include <iostream>

#define MEMORY_SIZE 10

class Clazz {
    std::vector<int> memory;

    public:
        Clazz() : memory(MEMORY_SIZE){}
        int memory_size() {return memory.size();}
};

int main() {
    Clazz c;
    std::cout << c.memory_size() << std::endl;
    return 0;
}
于 2012-10-01T19:33:15.210 回答