2016-03-11 3 views
0

enter image description here Я использую некоторые программы STL. Я объявлял вектор в основном и пытался запустить программу, в которой он работает, но если я объявляю тот же (вектор) внутри класса, то получаю ошибку компиляции. Я думаю, что компилятор не распознает вектор (объявленный внутри класса).компилятор не распознающий вектор как член класса

Я пробовал с std :: также по-прежнему ту же ошибку. Я использую компилятор netbeans IDE и synwin.

пожалуйста найти код ниже

#include <cstdlib> 
#include <iostream> 
#include <vector> 
#include <cctype> 
using namespace std; 

/* 
* 
*/ 

class vectorcl 
{ 
    vector<int> v(10); 
    int i; 
public: 
    vectorcl(); 
    void add_vector(); 
    void dis_vector(); 

}; 

vectorcl :: vectorcl() 
{ 
    for(i =0;i<10 ;i++) 
    { 
     v[i] = 0; 
    } 
} 

void vectorcl :: dis_vector() 
{  
    cout<< " The vale is : \n"; 
    for(i =0;i<10 ;i++) 
    { 
     cout << "\t " <<v[i]; 
    } 
} 

void vectorcl :: add_vector() 
{ 
    for (i =0 ; i<10; i++) 
    { 
     v[i] = i+1; 
    } 
} 

int main(int argc, char** argv) { 
// vector<int> vp(10); 
// for(int j =0;j<10 ;j++) 
// { 
//  cout << " " << vp[j]; 
// } 

    vectorcl v1; 
    v1.dis_vector(); 
    v1.add_vector(); 
    v1.dis_vector(); 
    return 0; 
} 

Пожалуйста, помогите мне в этом, на мой вопрос, почему мой компилятор не распознает вектор, объявленный внутри класса.

ошибка: ожидается идентификатор, прежде чем числовой константы ожидаемого «» или «...» перед числовой константы

Error

+0

Измените свой вопрос, чтобы отобразить фактические сообщения об ошибках, заполнить, в полном объеме и неотредактировать. –

+0

Это, вероятно, не должно быть java как тег. –

+0

Подсказка о вашей проблеме: вам нужно прочитать о * инициализатор-членах конструктора *. –

ответ

1

С первого взгляда, вы пытаетесь вызвать конструктор в классе прототипа: vector<int> v(10);. Ваш конструктор для этого класса будет вызываться в вашем конструкторе класса оболочки, если вы не используете список инициализации члена.

Edit: с помощью инициализации члена

vectorcl :: vectorcl(): v(10) 
{ 
} 
+0

Настоящая проблема заключается в том, что синтаксис недействителен. Это будет работать: 'vector v = vector (10);' – juanchopanza

+0

Вы уверены, что это действительно изменит что-нибудь? Это вызовет конструктор копии v таким же образом, что 'vector (10)' будет вызывать его конструктор. Оба в любом случае честно плохой дизайн. –

+0

Это кое-что изменило бы, потому что это сработало бы, в отличие от того, чтобы даже не компилировать. Но нет, он не будет ссылаться на конструктор в этой точке. Конструкция происходит только при создании экземпляра. – juanchopanza

2

Вы не можете использовать vector<int> v(10); в качестве переменной-члена. Решение состоит в том, чтобы заменить его vector<int> v; и добавить изменить конструктор так:

vectorcl::vectorcl(): 
    v(std::vector<int>(10,0/* This 0 is instead of the for-loop*/)){ 
} 

Или другой вариант, чтобы объявить его как:

std::vector<int> v = std::vector<int>(10); 

P.S. нет необходимости объявлять int i как член класса. Просто объявите его в каждой функции, в которой вы нуждаетесь.

+0

Спасибо, что вы работаете со своим вторым вариантом. –

+0

Вам не нужен этот цикл. – juanchopanza

+0

@juanchopanza да, конечно. Я просто оставлю это, как писал О.П. Я собираюсь редактировать спасибо –

Смежные вопросы