编译器未将向量识别为类成员

Posted

技术标签:

【中文标题】编译器未将向量识别为类成员【英文标题】: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 应该是你使用的函数中的一个局部变量。 【参考方案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 很陌生,正在尝试一些矢量..希望将来我的设计会更好

以上是关于编译器未将向量识别为类成员的主要内容,如果未能解决你的问题,请参考以下文章

C ++类成员函数别名模板,防止大括号括起来的初始化程序列表被识别为对/元组

动画控制器 vsync 未将“this”识别为有效表达式

编译类型向量类的私有成员时出错 - C++ [重复]

当元素具有类成员 Boost Concurrent Queue 时无法调整向量的大小

空格在 fread 中未被识别为 NA

如何从头文件中访问类的私有成员?