0

Modelという名前のクラスがあり、ypur.hファイルには次のものがあります。

private:
    vector<int> memory(MEMORY_SIZE);

MEMORY_SIZEは、値10のdefineヘッダーの定数です。

コンパイルしようとすると、このエラーコードが表示されます

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

これらは、vectorが含まれていないか、 namespace が欠落している私のショットです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 に答える