问一个vector用法的问题,在线等

时间:2023-01-31 18:47:00
  本人新手学c++,照着书上打了一段代码,编译不过,请教各位大大
代码如下
#include "stdafx.h"
#include <stdio.h>
#include <vector>
using namespace std;


class vectors
{
public :
struct Entry
{
      string name;
  int number;
};
vector<Entry>phone_book();

void print_entry(int i)
{
cout<<phone_book[i].name<<''<<phone_book[i].number<<'\n';

}
void add_entries(int n)
{
 phone_book.resize(phone_book.size()+n);
}

};
void main()
{


 vectors ve;

 ve.add_entries(3);
 ve.print_entry(1);
}

24 个解决方案

#1


好好对照下,确认你是对照这书的。

#2


#include <stdio.h> 
#include <vector> 
#include "stdafx.h" 
using namespace std; 


class vectors 

public : 
struct Entry 

string name; 
int number; 
}; 
vector<Entry> phone_book; //这边加括号变成是返回vector<Entry>的函数了。。去掉就好。。或者在括号里赋个值

void print_entry(int i) 

cout <<phone_book[i].name <<' ' <<phone_book[i].number <<'\n'; 


void add_entries(int n) 

phone_book.resize(phone_book.size()+n); 


}; 
void main() 



vectors ve; 

ve.add_entries(3); 
ve.print_entry(1); 

#3


哦,谢谢,本人初学,向各位学习了

#4


楼主自己比较比较吧!!!
#include "stdafx.h"
#include <string>
#include <iostream> 
#include <vector> 
using namespace std; 


class vectors 

public : 
struct Entry 

string name; 
int number; 
}; 
vector <Entry> phone_book; 

void print_entry(int i) 

cout <<phone_book[i].name <<" "<<phone_book[i].number <<'\n'; 


void add_entries(int n) 

phone_book.resize(phone_book.size()+n); 


};


int _tmain(int argc, _TCHAR* argv[])
{
vectors ve; 

ve.add_entries(3); 
ve.print_entry(1);

return 0;
}

#5


#include "stdafx.h"
#include <stdio.h>
#include <vector>
using namespace std;


class vectors
{
public :
struct Entry
{
      string name;
  int number;
};
vector<Entry>phone_book(1000);

void print_entry(int i)
{
cout<<phone_book[i].name<<''<<phone_book[i].number<<'\n';

}
void add_entries(int n)
{
 phone_book.resize(phone_book.size()+n);
}

};
void main()
{


 vectors ve;

 ve.add_entries(3);
 ve.print_entry(1);
}

改了还是不对啊!!
错误 1 error C2059: 语法错误 : “常量” e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 17
错误 2 error C2137: 空字符常量 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 3 error C3867: “vectors::phone_book”: 函数调用缺少参数列表;请使用“&vectors::phone_book”创建指向成员的指针 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 4 error C2109: 下标要求数组或指针类型 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 5 error C2228: “.name”的左边必须有类/结构/联合 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 6 error C3867: “vectors::phone_book”: 函数调用缺少参数列表;请使用“&vectors::phone_book”创建指向成员的指针 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 7 error C2109: 下标要求数组或指针类型 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 8 error C2228: “.number”的左边必须有类/结构/联合 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 9 error C2228: “.resize”的左边必须有类/结构/联合 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 26
错误 10 error C2228: “.size”的左边必须有类/结构/联合 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 26

#6


我改成vector <Entry>phone_book(1000);就出现这么多错误,比原来多一个
错误 1 error C2059: 语法错误 : “常量” e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 17 
求教各位高手

#7


请问在括号里加值之后应该是非空的容器,使用起来有区别吗?

#8


不知道我的回答正不正确。

采用楼主的方法vector <Entry>phone_book(1000)声明一个对象的话,前提是要保证所存储的类类型/结构体对象有默认的构造函数。因为如果未提供默认构造函数的话,对容器成员的初始化会是一个没有定义的行为,自然就会出问题。所以建议楼主直接使用vector<Entry> phone_book进行定义。以后再使用phone_book.push_back()来向容器里添加元素。

不知道我的回答对楼主是否有帮助。

#9


引用 6 楼 cpmoffice 的回复:
我改成vector <Entry>phone_book(1000);就出现这么多错误,比原来多一个
错误 1 error C2059: 语法错误 : “常量” e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 17
求教各位高手

把括号去掉就好了。。

#10


引用 7 楼 cpmoffice 的回复:
请问在括号里加值之后应该是非空的容器,使用起来有区别吗?

像vector<int> v(100);就可以用括号后加值

#11


引用 10 楼 stardust20 的回复:
引用 7 楼 cpmoffice 的回复:请问在括号里加值之后应该是非空的容器,使用起来有区别吗?
像vector <int> v(100);就可以用括号后加值


因为int是系统内置对象类型,所以可以以括号的方式进行初始化。而对于非内置类型,则需要自己提供初始化的方法。

#12


引用 11 楼 steven20027 的回复:
引用 10 楼 stardust20 的回复:引用 7 楼 cpmoffice 的回复:请问在括号里加值之后应该是非空的容器,使用起来有区别吗?像vectorv(100);就可以用括号后加值

因为int是系统内置对象类型,所以可以以括号的方式进行初始化。而对于非内置类型,则需要自己提供初始化的方法。

嗯。。。知道。。

#13


引用 11 楼 steven20027 的回复:
引用 10 楼 stardust20 的回复:引用 7 楼 cpmoffice 的回复:请问在括号里加值之后应该是非空的容器,使用起来有区别吗?像vectorv(100);就可以用括号后加值

因为int是系统内置对象类型,所以可以以括号的方式进行初始化。而对于非内置类型,则需要自己提供初始化的方法。

vector<int> v(30);
cout<<v.size()<<endl;这边输出30。。。30是指预分配30个int吧。。

#14


#include <iostream>
#include <vector>
using namespace std;
class A
{
};
int main()
{
vector<A> v(30);
cout<<v.size()<<endl;//也是30
}

这样的代码也可以通过。。。调用A的默认构造函数一次。。。然后拷贝构造出其它的副本。。

#15


引用 13 楼 stardust20 的回复:
引用 11 楼 steven20027 的回复:引用 10 楼 stardust20 的回复:引用 7 楼 cpmoffice 的回复:请问在括号里加值之后应该是非空的容器,使用起来有区别吗?像vectorv(100);就可以用括号后加值 因为int是系统内置对象类型,所以可以以括号的方式进行初始化。而对于非内置类型,则需要自己提供初始化的方法。
vector <int> v(30);
cout < <v.size() < <endl;这边输出30。。。30是指预分配30个int吧。。


是的,但是对于内置类型来说,分配30个int的同时也是进行了初始化的。对于int而言,均被初始化为0。但是对于楼主提供的结构体,则必须要自己提供初始化方法啊。

#16


把括号去掉
或者你提供个默认构造函数吧

#17


引用 16 楼 tsocpp 的回复:
把括号去掉
或者你提供个默认构造函数吧


正解,呵呵。

#18


struct Entry
{
Entry()
{}
      string name;
  int number;
};
void main()
{
vectors::Entry  a;
a.name = "adad";
vector<vectors::Entry> mm(12);
// 在main函数中式可以用的!
vectors ve;
ve.phone_book.push_back(a);
ve.add_entries(0);
ve.print_entry(0);


在类中就不能这么用了,
vector<Entry> phone_book(10);
什么原因我不知道!

只能vector<Entry> phone_book;

#19


没有说完!!
vector<int> mTestInt(100);
在类中也是不能定义的!

#20


知道原因了!!
vector <Entry> phone_book定义变量,
需要在类的构造函数初始化!
class vectors
{
public:
   vectors()
   : phone_book(100)
   {}
protected:
   vector <Entry> phone_book
}
这样就能解决问题了!

#21


楼上把我想说的说了,初始化是在构造函数那里写的,类的声明那里不能初始化

#22


路过,学习了
。....................................

#23


思路、理解意思才是重要的。
不光动手实践能力也很重要,加油哦

#24


    看看,路过了。(回复内容太短了!gou le ba!)

#1


好好对照下,确认你是对照这书的。

#2


#include <stdio.h> 
#include <vector> 
#include "stdafx.h" 
using namespace std; 


class vectors 

public : 
struct Entry 

string name; 
int number; 
}; 
vector<Entry> phone_book; //这边加括号变成是返回vector<Entry>的函数了。。去掉就好。。或者在括号里赋个值

void print_entry(int i) 

cout <<phone_book[i].name <<' ' <<phone_book[i].number <<'\n'; 


void add_entries(int n) 

phone_book.resize(phone_book.size()+n); 


}; 
void main() 



vectors ve; 

ve.add_entries(3); 
ve.print_entry(1); 

#3


哦,谢谢,本人初学,向各位学习了

#4


楼主自己比较比较吧!!!
#include "stdafx.h"
#include <string>
#include <iostream> 
#include <vector> 
using namespace std; 


class vectors 

public : 
struct Entry 

string name; 
int number; 
}; 
vector <Entry> phone_book; 

void print_entry(int i) 

cout <<phone_book[i].name <<" "<<phone_book[i].number <<'\n'; 


void add_entries(int n) 

phone_book.resize(phone_book.size()+n); 


};


int _tmain(int argc, _TCHAR* argv[])
{
vectors ve; 

ve.add_entries(3); 
ve.print_entry(1);

return 0;
}

#5


#include "stdafx.h"
#include <stdio.h>
#include <vector>
using namespace std;


class vectors
{
public :
struct Entry
{
      string name;
  int number;
};
vector<Entry>phone_book(1000);

void print_entry(int i)
{
cout<<phone_book[i].name<<''<<phone_book[i].number<<'\n';

}
void add_entries(int n)
{
 phone_book.resize(phone_book.size()+n);
}

};
void main()
{


 vectors ve;

 ve.add_entries(3);
 ve.print_entry(1);
}

改了还是不对啊!!
错误 1 error C2059: 语法错误 : “常量” e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 17
错误 2 error C2137: 空字符常量 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 3 error C3867: “vectors::phone_book”: 函数调用缺少参数列表;请使用“&vectors::phone_book”创建指向成员的指针 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 4 error C2109: 下标要求数组或指针类型 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 5 error C2228: “.name”的左边必须有类/结构/联合 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 6 error C3867: “vectors::phone_book”: 函数调用缺少参数列表;请使用“&vectors::phone_book”创建指向成员的指针 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 7 error C2109: 下标要求数组或指针类型 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 8 error C2228: “.number”的左边必须有类/结构/联合 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 21
错误 9 error C2228: “.resize”的左边必须有类/结构/联合 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 26
错误 10 error C2228: “.size”的左边必须有类/结构/联合 e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 26

#6


我改成vector <Entry>phone_book(1000);就出现这么多错误,比原来多一个
错误 1 error C2059: 语法错误 : “常量” e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 17 
求教各位高手

#7


请问在括号里加值之后应该是非空的容器,使用起来有区别吗?

#8


不知道我的回答正不正确。

采用楼主的方法vector <Entry>phone_book(1000)声明一个对象的话,前提是要保证所存储的类类型/结构体对象有默认的构造函数。因为如果未提供默认构造函数的话,对容器成员的初始化会是一个没有定义的行为,自然就会出问题。所以建议楼主直接使用vector<Entry> phone_book进行定义。以后再使用phone_book.push_back()来向容器里添加元素。

不知道我的回答对楼主是否有帮助。

#9


引用 6 楼 cpmoffice 的回复:
我改成vector <Entry>phone_book(1000);就出现这么多错误,比原来多一个
错误 1 error C2059: 语法错误 : “常量” e:\c++文档\text\vectortext1\vectortext1\vectortext1.cpp 17
求教各位高手

把括号去掉就好了。。

#10


引用 7 楼 cpmoffice 的回复:
请问在括号里加值之后应该是非空的容器,使用起来有区别吗?

像vector<int> v(100);就可以用括号后加值

#11


引用 10 楼 stardust20 的回复:
引用 7 楼 cpmoffice 的回复:请问在括号里加值之后应该是非空的容器,使用起来有区别吗?
像vector <int> v(100);就可以用括号后加值


因为int是系统内置对象类型,所以可以以括号的方式进行初始化。而对于非内置类型,则需要自己提供初始化的方法。

#12


引用 11 楼 steven20027 的回复:
引用 10 楼 stardust20 的回复:引用 7 楼 cpmoffice 的回复:请问在括号里加值之后应该是非空的容器,使用起来有区别吗?像vectorv(100);就可以用括号后加值

因为int是系统内置对象类型,所以可以以括号的方式进行初始化。而对于非内置类型,则需要自己提供初始化的方法。

嗯。。。知道。。

#13


引用 11 楼 steven20027 的回复:
引用 10 楼 stardust20 的回复:引用 7 楼 cpmoffice 的回复:请问在括号里加值之后应该是非空的容器,使用起来有区别吗?像vectorv(100);就可以用括号后加值

因为int是系统内置对象类型,所以可以以括号的方式进行初始化。而对于非内置类型,则需要自己提供初始化的方法。

vector<int> v(30);
cout<<v.size()<<endl;这边输出30。。。30是指预分配30个int吧。。

#14


#include <iostream>
#include <vector>
using namespace std;
class A
{
};
int main()
{
vector<A> v(30);
cout<<v.size()<<endl;//也是30
}

这样的代码也可以通过。。。调用A的默认构造函数一次。。。然后拷贝构造出其它的副本。。

#15


引用 13 楼 stardust20 的回复:
引用 11 楼 steven20027 的回复:引用 10 楼 stardust20 的回复:引用 7 楼 cpmoffice 的回复:请问在括号里加值之后应该是非空的容器,使用起来有区别吗?像vectorv(100);就可以用括号后加值 因为int是系统内置对象类型,所以可以以括号的方式进行初始化。而对于非内置类型,则需要自己提供初始化的方法。
vector <int> v(30);
cout < <v.size() < <endl;这边输出30。。。30是指预分配30个int吧。。


是的,但是对于内置类型来说,分配30个int的同时也是进行了初始化的。对于int而言,均被初始化为0。但是对于楼主提供的结构体,则必须要自己提供初始化方法啊。

#16


把括号去掉
或者你提供个默认构造函数吧

#17


引用 16 楼 tsocpp 的回复:
把括号去掉
或者你提供个默认构造函数吧


正解,呵呵。

#18


struct Entry
{
Entry()
{}
      string name;
  int number;
};
void main()
{
vectors::Entry  a;
a.name = "adad";
vector<vectors::Entry> mm(12);
// 在main函数中式可以用的!
vectors ve;
ve.phone_book.push_back(a);
ve.add_entries(0);
ve.print_entry(0);


在类中就不能这么用了,
vector<Entry> phone_book(10);
什么原因我不知道!

只能vector<Entry> phone_book;

#19


没有说完!!
vector<int> mTestInt(100);
在类中也是不能定义的!

#20


知道原因了!!
vector <Entry> phone_book定义变量,
需要在类的构造函数初始化!
class vectors
{
public:
   vectors()
   : phone_book(100)
   {}
protected:
   vector <Entry> phone_book
}
这样就能解决问题了!

#21


楼上把我想说的说了,初始化是在构造函数那里写的,类的声明那里不能初始化

#22


路过,学习了
。....................................

#23


思路、理解意思才是重要的。
不光动手实践能力也很重要,加油哦

#24


    看看,路过了。(回复内容太短了!gou le ba!)