【问题标题】:compiler not recognizing vector as class member编译器未将向量识别为类成员
【发布时间】:2016-03-11 06:25:48
【问题描述】:

enter image description here我正在尝试一些 STL 程序。我已经在 main 中声明了一个向量并尝试运行它正在运行的程序,但是如果我在类中声明了相同的(向量),那么就会出现编译错误。我认为编译器无法识别向量(在类中声明)。

我尝试过 std:: 仍然是同样的错误。我正在使用 netbeans IDE 和 cigwin 编译器。

请在下面找到代码

#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

【问题讨论】:

  • 请编辑您的问题以显示实际的错误消息,完整、完整且未经编辑。
  • 这可能不应该有 java 作为标签。
  • 关于您的问题的提示:您需要阅读有关构造函数成员初始化列表
  • 最后一个不相关的提示:不要将成员变量用于应该是局部变量的东西。成员变量i 应该是你使用的函数中的一个局部变量。

标签: c++ vector


【解决方案1】:

您不能使用vector&lt;int&gt; v(10); 作为成员变量。解决方案是将其替换为vector&lt;int&gt; 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);

附:无需将 int i 声明为类成员。只需在您需要的每个函数中声明它即可。

【讨论】:

  • 你不需要那个循环。
  • @juanchopanza 当然可以。我只是按照OP所写的方式保留它。我要编辑谢谢
【解决方案2】:

乍一看,您是在尝试调用类原型中的构造函数:vector&lt;int&gt; v(10);。除非您使用成员初始化列表,否则该类的构造函数将在您的包装类构造函数中调用。

编辑:使用成员初始化

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

【讨论】:

  • 真正的问题是语法无效。这会起作用:vector&lt;int&gt; v = vector&lt;int&gt;(10);
  • 你确定这真的会改变什么吗?这将调用 v 的复制构造函数,就像 vector&lt;int&gt;(10) 调用它的构造函数一样。无论如何,这两者都是真正糟糕的设计。
  • 它会改变一些东西,因为它会工作,而不是甚至不编译。但是不,那时它不会调用构造函数。构造只发生在实例化时。
  • 向量项是值初始化的,这个循环是多余的
  • @Russley Shaw:感谢您的诚实回答。我对 STL 很陌生,正在尝试一些矢量..希望将来我的设计会更好
猜你喜欢
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 2021-06-19
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多