2013-10-06 2 views
-1

Я пытаюсь создать класс, который имеет элемент типа std::vector и я хочу этот вектор заполняется с номером 2, когда создается экземпляр этого класса:Как заполнить вектор при построении объекта в C++?

#include <vector> 
using namespace std; 
class primes{ 
    private: 
    vector <int> myvec; 
    myvec.push_back(2); 
}; 

Но компилятор дает мне:

error: ‘myvec’ does not name a type

+3

'#include '. – us2012

+0

К сожалению, набрав в моем ответе – user2803001

+0

Ya в сообщении говорится, что «myvec» не называет тип – user2803001

ответ

3
class primes{ 
    private: 
    vector <int> myvec; 
    myvec.push_back(2); // <-- this can not be placed here 
}; 

компилятор ожидает там объявление/определение элемента или метод (функция-член). Вы не можете разместить там код, например myvec.push_back(2);. Это должен быть помещен внутрь корпуса какого-либо метода:

class primes { 
private: 
    std::vector<int> myvec; 

public: 
    void addPrime(int num) { 
     myvec.push_back(num); 
    } 
}; 

или в случае, если вы хотите построить экземпляр primes с vector, которые уже содержат номер 2:

class primes { 
public: 
    primes() : myvec(std::vector<int>(1, 2)) { } 

private: 
    std::vector<int> myvec; 
}; 

или, если вам нужно заполнить этот вектор с большим количеством из них:

int PRIMES[] = { 1, 2, 3, 5, 7 }; 
const int PCOUNT = sizeof(PRIMES)/sizeof(PRIMES[0]); 

class primes { 
public: 
    primes() 
    : myvec(std::vector<int>(PRIMES, PRIMES + PCOUNT)) { } 

private: 
    std::vector<int> myvec; 
}; 
+0

Есть ли способ, которым я мог бы просто создать вектор, чтобы он уже содержал 2? – user2803001

+0

@ user2803001: Смотрите мое редактирование :) – LihO

+1

@ user2803001 вы также можете сказать 'vector myvec = {2};' если у вас есть C++ 11. – juanchopanza

3

myvec.push_back(2); должно быть внутри метода.

Вы не можете записать его внутри декларации класса, как и вы.

Пример:

class primes 
{ 
    public: 
    void Add(int num) 
    { 
     myvec.push_back(num); // is in a method 
    } 
    private: 
    vector <int> myvec; 
    // myvec.push_back(num); // <-- Illegal in c++ 
}; 

Если вы используете C++ 11 и вы хотите инициализировать вектор, содержащий значение 2:

class primes 
{ 
    private: 
    vector <int> myvec{2}; 
    //    ^^^ 
}; 
Смежные вопросы