C++中 类成员函数声明中,vector成员的初始化方式问题

定义一个类,类中有一个vector成员,初始化的时候发现了一个问题理解不了
初始化报错
使用这种初始化方式报错
初始化报错
使用这种初始化方式也报错
初始化正确
只有这种初始化方式正确
为什么第三张图片里的初始化方式可以,第一张、第二张的初始化方式报错

c++
0

1个回答

第一张,第二张定义时用的是小括号( )。
编译器会认为你尝试定义一个函数。

对类的成员函数而言,除了在类体中声明外,还需要在类体外定义。(inline方式在类体中定义亦可)。

第三张是初始化列表的方式在构造函数定义时给成员变量赋值,是可以的。

如果有帮助,请采纳答案好吗,谢谢!

4
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
vector<Mat>作为类成员变量,初始化问题
最近做了一个小程序,类中 使用了vector 作为成员变量,定义时不能初始化大小Class A{ ...... vector vec(3); } 总是报错。 然后在构造函数里初始化吧。 vec=vector(3); 问题解决。 继之前vec作为函数内变量的问题,对程序做了一点改动,遇到了初始化问题。
C++学习--类成员的初始化
https://blog.csdn.net/coder_xia/article/details/74478221、关于构造函数1)用构造函数确保初始化对于一个空类[cpp] view plain copyclass Empty { };  编译器会自动声明4个默认函数:构造函数,拷贝构造函数,赋值函数,析构函数(当然,如果不想使用自动生成的函数,就应该明确拒绝),这些生成的函数都是public且i...
C++为类中提供类成员的初始化列表(★firecat推荐★)
在使用C++编程的过程当中,常常需要对类成员进行初始化,通常的方法有两种: 第一种方法: CMYClass::CSomeClass() { x=0; y=1; } 第二种方法: CSomeClass::CSomeClass() : x(0), y(1) { } 本文将要探讨这两种方法的异同以及如何使用这两种方法。     从技术上说,第二种方法比较好,但是在大多
C++中 类成员函数声明中,vector成员的初始化方式问题
定义一个类,类中有一个vector成员,初始化的时候发现了一个问题理解不了rn![初始化报错](https://img-ask.csdn.net/upload/201707/02/1498983894_308029.png)rn使用这种初始化方式报错rn![初始化报错](https://img-ask.csdn.net/upload/201707/02/1498983908_688020.png)rn使用这种初始化方式也报错rn![初始化正确](https://img-ask.csdn.net/upload/201707/02/1498983921_481758.png)rn只有这种初始化方式正确rn为什么第三张图片里的初始化方式可以,第一张、第二张的初始化方式报错
C++类成员变量初始化顺序问题
今天在看剑指offer这本书时,看待一个简单的举例,说应聘C++岗位的不知道成员变量初始化顺序!我很惊讶,因为我也不知道,所以就看上网查了一下,看到了一个博客()以及其中的内容,现在将我的学习过程分享出来! 首先看一下代码: #include using namespace std; class A { public: A() :n2(0), n1(n2 + 2) {} /
C++11之初始化成员变量
C++98中的成员变量初始化 在声明类的时候,对于静态类型并且是常量类型,同时是枚举或者是整型的变量可以使用=在声明时初始化。 对于不符合上述要求的静态变量可以在类外使用=进行初始化 对于非静态类型可以说个初始化列表进行初始化 使用()对自定义类型进行初始化 使用{}对元素集合统一初始化 C++11中的成员变量初始化在C++11中可以使用=或者{}就地初始化,类似于Java语言。 代码示例stru
c++11类的就地初始化问题
1 c++98只能对静态的常量能进行就地初始化,其他的不行 struct  st { static const int a=10;//yes int a=10;//no }    c++11可以对非静态的成员变量就地初始化, struct st { int a=10;//yes }   但对静态的非常量的成员变量c++98和c++11保持了一致性,即需到头文件以外的地
vector 静态成员变量的初始化
某些情况下,在写C++类的时候,希望能通过一个静态初始化函数来对类的一些静态成员进行初始化。比如,往静态的std::map成员或者std::vector成员里添加一些固定的内容等。这在Java里通过static块很容易实现。但在C++里该怎么办呢?   如果要初始化一个普通的静态成员,只需要在实现文件(源文件)中定义该成员并赋予初始值即可,比如: class Test1 { publ
c++能不能给类的成员变量在声明的时候初始化?
能。可能早先的版本不能,但是c++11标准下能。有人说在声明的时候初始化相当于在构造函数中初始化,其实不是的,成员变量初始化的顺序为:先进行声明时初始化,然后进行初始化列表初始化,最后进行构造函数初始化,如下代码:(另外初始化列表中初始化的顺序是和变量声明的顺序一样,而与列表中的顺序无关) #include &quot;stdafx.h&quot; #include &amp;lt;iostream&amp;gt; us...
C++11中类数据成员初始化方法详解
C++98为类中提供类成员的初始化列表。 类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员  2.进入构造函数后在构造函数中执行一般计算   1.类里面的任何成员变量在定义时是不能初始化的。   2.一般的数据成员可以在构造函数中初始化。   3.const数据成员必须在构造函数的初始化列表中初始化。   4.static要在类的定义外面初始化。
C++ 类成员函数作用域以及构造函数初始值列表
名字查找与类的作用域: 普通查找方式: 在名字所在的块中寻找声明,只考虑在语句之前的声明 如果没找到继续查找外层作用域,也是语句之前的声明 如果没找到,程序报错 定义在类内部的成员函数 首先编译成员的声明(声明中的名字,函数返回类型和参数列表) 直到类全部可见后编译函数体 成员函数中的名字按下面的方式解析 在成员函数内查找该名字的声明,只有使用之前出现的声明 才被考虑 如果在成员函数内没...
C++容器vector的常用成员函数
vector容器是笔试时最经常用到的容器,它实际是一个类模板,它所具有一些成员函数我们必须熟练使用,这样才会加快编程速度。 首先加头文件并定义:   #include vectorvec; 1、获取vector里的元素个数 int len = vec.size(); 2、向vector添加元素 int temp; cin>>temp; vec.push_back(temp);
Java成员初始化
Java的成员初始化方式包括:默认初始化(自动初始化)、指定初始化、构造器初始化、静态块初始化(静态子句)、实例初始化(非静态实例初始化) 1.默认初始化:即只进行成员变量的定义,不进行主动的初始化操作,由编译器为成员变量赋一个默认值。 public class InitialValue{     boolean bool;     char ch;     byte b;   
C++类内成员初始化
c++
c++ 带有初始化成员列表的类构造函数 定义与实现分离 方法
情景:c++类,stack。 要求:类的构造函数带有初始化成员列表,定义与实现分离。 //stack.h#include using namespace std; template class Stack{ private: int maxsize; int top; vector vec; public: Stack(int ms); Stack(); };定义了基
对map, vector类型的静态成员初始化
<br />#pragma warning(disable:4786)<br />#include <iostream><br />#include <string><br />#include <map><br />#include <vector><br />using namespace std;<br />class Test<br />{<br />public:<br /> static map<string, int> testMap;<br /> static vector<int> vec
c++ 类成员变量初始化顺序
我们通常说的Java是可以跨平台运行的,那么他是如何做到跨平台运行的呢。靠的就是JVM虚拟机。通常我们把自己编写好的Java代码编译生成class字节码文件,然后Java虚拟机加载这些字节码文件,解析这些字节码指令。Java虚拟机有自己完善的硬件架构,如处理器栈、堆栈、寄存器等,还有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得java程序只需要生成在Java虚拟机上运行的目标代码
Java类成员初始化
Java类成员初始化与C++初始化的方式有很多不同,这部分知识相对比较基础,从而导致很多Java程序员对于Java类初始化机制不甚了了。下面就Java类成员初始化方式做一个梳理,希望对大家有益。 一、       所有变量使用前都要得到恰当的初始化 Java尽力保证:所有变量在使用前都得到恰当的初始化。 对于类成员变量,Java按照自动初始化的方式,如果是基本成员变量就赋值0,其他赋值nul
Cpp -C++类中成员变量的初始化总结
1. 普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。 class CA { public: int data; public: CA(); }; CA::CA():data(0) //……#1……初始化列表方式 { //data = 0;//……#1……赋值方式 };2、static 静
c++类的构造函数两种初始化成员方式的区别
类的构造函数在初始化成员时,有以下两种方式: 方式一: CSomeClass::CSomeClass()  {     x=0;     y=1;  }  方式二: CSomeClass::CSomeClass() : x(0), y(1)  {  }  方式一我们可以称为赋值初始化,通过在函数体内进行赋值初始化。 方式二我们称为列表初始化,在冒
类的成员变量 声明顺序 决定 初始化顺序(构造函数初始化列表不影响)
类成员的声明顺序决定初始化顺序; 构造函数初始化列表不影响初始化顺序;C++初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。class B { public: //m_b = 2,m_a = 1 B():m_a(1),m_b(m_a+1) { cout << "m_b = " << m_b << ",m_a = " << m_a
C++ 静态变量的初始化 以及 vector的初始化
《深入浅出MFC》这样解释:    Static 成员不属于对象的一部分,而是类的一部分。所以程序可以在没有诞生分和   对象的时候就处理此种成员变量.但必须首先初始化它。   不要把static成员变量的初始化操作安排在类的构造函数中,因为构造函数可能一   再被调用,而变量的初值只应该设定一次。也不要把初始化操作安排在头文件中, 因为它可能被载入到许多地方,因此就可能执行许多次。你应
类的数组成员变量的初始化
使用STL标准模板库之后,编程时已经很少使用数组和指针,相反,多使用序列容器vector代替之。 但事实并不这么理想,在迫不得已的情况下,我们还是会选择使用数组。 这里介绍一下当数组作为类的成员变量时,应该怎么对它(数组)进行初始化。 在类的构造函数中可以使用成员初始化表初始化各个成员变量,这种方法是很受推荐和赞扬的,因为使用成员初始化表中对成员进行初始化和在构造函数体中对成员赋
c++ vector的六个初始化方式
#include; using namespace std; void main() { vector vec0;//六种初始化方式; vector vec5(othervec); vector vector(other.begin(), other.end()); vector vec1{ 1, 2, 3, 4, 5 }; vector vec2(10, 1); vector ve
类成员的初始化--成员初始化列表(常量,引用,成员对象)
常量,引用,对象成员的初始化要在成员初始化表中进行,不可以直接=号赋值。 class B{ } class A{      public:              A():number(n),ref(r),b(b1){...}      private:        const int number;        int & ref;        B b;
C++11之快速初始化成员变量
color=#00ffff 1. C++98中支持所谓的“就地声明”的方式。所谓就地声明就是指 在类的声明中使用 等号 “=” 来初始化静态成员常量。但是在类中直接使用等号“=”来声明变量时,其要求是比较苛刻的。它必须满足2个条件,否则,编译失败。 (1)类中的该静态成员变量需要满足“常量性”,如果不满足静态变量常量性,则不可以进行就地声明。 (2)在(1)的基础上,还需要满足该静态常量成员...
C++中类内成员的定义,声明总结(静态和非静态成员)
近学习到C++ primer中关于类中静态变量的部分,有一道课后题非常有意思。 题目是关于静态变量在类中的初始化。 首先判断下列代码的正误。 class example{ public: //static double rate=6.5; static const int size; std::vector vec(size); }; 代码是这样的。 当时我一看,觉得没有错误啊。
C++类中引用成员和常量成员的初始化(初始化列表)
如果一个类是这样定义的: Class A { public: A(int pram1, int pram2, int pram3); privite: int a; int &b; const int c; } 假如在构造函数中对三个私有变量进行赋值则通常会这样写:
C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误
数组作为成员变量时只有默认初始化,也就是无法传递参数。有两种变通方案:你可以把对象数组改成指针数组,或者把ClassB类的构造和初始化分开。 方案一: class ClassA{ private: ClassB* arrayOfObjectClassB[2]; public: ClassA(int i){ arrayObjectOfCl
C++类成员初始化顺序问题
今天刚把买了一个月的剑指offer这本书翻阅一下,看到一个简单的举例。说应聘C++岗位的不知道成员变量初始化顺序!大冬天的背后竟冒出了一丝冷汗,因为我也不知道,所以就上网查了一下,将学到的知识记录如下。 主要参考博客: C++类成员初始化顺序问题1 C++类成员初始化顺序问题2 问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下,#include <iostream> us
转:(C++)对象成员数组初始化/赋值讨论
1、对象成员,顾名思义,也就是类里面的一个成员,其类型是对象,很容易理解,下面代码中,_util就是类CMyClass的对象成员 class CUtil; class CMyClass {   CUtil _util; } 2、对象成员的初始化,如果该对象成员有不带参数的构造函数,则在本类构造函数处(瑶瑶按:这里的“本类”指的是CMyClass)可以直接赋值,因为其默认调用了不带参数的构造函数为其分配空间:   3、但如果该对象成员没有不带参数的构造函数,则可以在本类构造函数使用初始化列表:   4、推想,
C++类中成员有指针时的注意事项
关于类中有new初始化的指针成员.可能出现的问题分享的内容默认拷贝(复制)构造函数、赋值运算符,以及显示拷贝构造函数、赋值运算符int* p = new int[0]algrithm库中的sort函数拷贝(复制)构造函数、赋值运算符类对象的成员经常需要动态分配内存。例如int* path.用于保存遍历的节点,申请不同的字节长度满足规模大小不同的需求。如同默认构造函数,当没有定义拷贝(复制)构造函数...
C++ 类中的static成员的初始化和特点
C++ 类中的static成员的初始化和特点在C++的类中有些成员变量初始化和一般数据类型的成员变量有所不同。以下测试编译环境为:gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)测试代码(g++编译通过):#include <iostream>using namespace std;class Test { public:
Java类的各种成员初始化顺序
参考:https://blog.csdn.net/qq_27093465/article/details/70292221 class B extends A ,然后A类也就是父类里面有静态代码块,普通代码块,静态方法,静态成员变量,普通成员变量,普通方法。 子类也是这样,然后继承之后,关于程序打印输出的结果。 涉及到Java类的各种成员的初始化顺序。经测试,得到如下结论: 执行顺序:按照下...
实战c++中的vector系列--vector<unique_ptr<>>初始化(所有权转移)
C++11为我们提供了智能指针,给我们带来了很多便利的地方。那么如果把unique_ptr作为vector容器的元素呢?形式如出一辙:vector<unique_ptr<int> > vec;但是怎么给vec添加元素呢?看下面:#include<iostream> #include<vector> #include <memory> using namespace std; int main() {
如何初始化C++的static Vector 类型的变量
_init_static_Vector.h: private: static std::vector mStrings; static bool _init; static bool init(); _init_static_Vector.cpp: std::vector _init_static_Vector::mStrings; bool A2dpProfile::_
类的常量数组如何初始化
(1).将a[10]转移到类层次中,即将const   int   a[10]改为static   const   int   a[10],你可以认真的想一想,既然a[10]是const,那么每一个对象真的需要单独的一份a[10]吗?大部分时候答案应该是no。现在类定义如下:                       class   A                       {      
C++ 类(构造函数的成员初始化列表)
文章概述 构造函数的成员初始化列表 构造函数的成员初始化列表 下面的代码分析了什么时候使用成员初始化列表: class A { private: int a; public: A(int a) { this-&amp;gt;a = a; } int getA() { re...
引用作为C/C++ - 类中成员变量
引用作为C/C++ - 类中成员变量 转自:http://blog.csdn.net/lazyq7/article/details/48186291 引用作为成员变量: 不能有默认构造函数必须提供构造函数 构造函数的形参必须为引用类型 初始化必须在成员初始化链表内完成 成员引用示例 C++引用 引用在定义时必须初始化,否则编译时便会报错。如果类(自定义类型)的成员是
新手易犯的错误:C++类指针成员初始化
还记得工作两年多跳槽到北京某浏览器公司,从后端j2ee改行做了c++,虽然以前学过,但是实践做起项目来,实在是艰难,尤其是整个webkit项目非常庞大,一时间手足无措。 那时候遇到了很多莫名其妙的问题,记忆犹新的就是这个类指针成员初始化的问题。 简单的描述就是: 类的简单变量成员并不会自己初始化为0,所以一般需要在构造函数列表中显示初始化为0,如果不这么做,而在其它地方又做了非0判断,或直接
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java学习中常见的问题 java学习中遇到的问题