注册 登录
编程论坛 C++教室

[求助]这段程序编译有错,是什么原因呢?

ioriliao 发布于 2007-05-09 08:12, 1510 次点击

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
struct Pair{
string name;
double val;
};

vector<Pair>pairs;

system("PAUSE");
return EXIT_SUCCESS;
}

21 回复
#2
aipb20072007-05-09 08:42
#include <vector>
vector<Pair>pairs;


vector<Pair> pairs;
#3
ioriliao2007-05-09 10:12

加上了还是有错
[CODE]#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{

struct Pair{
string name;
double val;
};

vector<Pair>Pairs;

system("PAUSE");
return EXIT_SUCCESS;
}[/CODE]

#4
PcrazyC2007-05-09 10:31
你把这个结构体定义到main函数外面去
#5
ioriliao2007-05-09 10:34
谢谢!为什么要这样做的呢?
#6
ioriliao2007-05-09 10:35
[CODE]

#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>

using namespace std;
struct Pair{
string name;
double val;
};
int main(int argc, char *argv[])
{



vector<Pair>Pairs;

system("PAUSE");
return EXIT_SUCCESS;
}

[/CODE]
这样写可以
但这样写不可以.为什么?
[CODE]#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{



vector<Pair>Pairs;

system("PAUSE");
return EXIT_SUCCESS;
}

struct Pair{
string name;
double val;
};[/CODE]

#7
PcrazyC2007-05-09 10:44
至于为什么定义到前面去我也不太清楚,只是根据提示改的,我学C++也没几天,刚开始的.

但定义到后面去肯定不行,还没定义就开始用,这可能吗,全局变量的作用范围是从定义处开始到程序结束.
#8
PcrazyC2007-05-09 10:47
提示那个类型不能用来作模板的参数.

在网上搜了一下好像是这个原因:

在函数内定义的类型具有无连接的属性,不能用来作模板的参数
#9
ioriliao2007-05-09 10:54
噢..我知道了..原来是我把它与函数搞乱了.
#10
PcrazyC2007-05-09 10:58
函数也一样,在后面定义同样不能用,除非你在前面作声明
#11
ioriliao2007-05-09 11:13

函数可以啊

[CODE]#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
int OK(void);
cout<<OK()<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

int OK(void)
{
return 1;
}[/CODE]

不知道我的这样算不算是声明了.我知道有一个关键字是声明用的extern

#12
PcrazyC2007-05-09 11:19

你把这个去掉试试:int OK(void);

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
//int OK(void); 这就是声明
cout<<OK()<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

int OK(void)
{
return 1;
}

#13
ioriliao2007-05-09 11:26

这个知道.有就是有些不解extern

#14
PcrazyC2007-05-09 11:37
extern就是告诉编译器,我声明的变量已经在后面或者在与其连接的源文件中定义了,这个变量一定要是全局变量
#15
ioriliao2007-05-09 11:39
这个有什么用.
能否给个简单而又可以体现它作用的例子看看否.
谢谢!
#16
PcrazyC2007-05-09 11:51

在一个工程中建立两个文件

要FILE1中写代码:

int a[10000];
int main()
{
double tt(int);
int c;
printf("%lf",tt(c));
}

在FILE2中写代码:

extern a; //可以使用文件外的变量A,同时不用浪费空间.
double(int c)
{
int i;
double y;
for(i=0;i<10000;i++)
y*=a[i];
return y;
}

随便写的,不知道有没有问题,我要下了,吃饭去

#17
ioriliao2007-05-09 12:38
噢..明白了..这是不是叫共享内存.
#18
neverDie2007-05-09 12:59
结构体也可以在后面定义,不过与函数一样,事先声明。

extern关键字用来声明变量而不是定义,这样可以使变量在不同的文件中使用。
声明允许多次,但定义只能一次。
#19
ioriliao2007-05-09 13:03

是不是结构体在后面定义就得要用extern去声明.好的..我这就去试试.

#20
aipb20072007-05-09 13:37
以下是引用ioriliao在2007-5-9 13:03:35的发言:

是不是结构体在后面定义就得要用extern去声明.好的..我这就去试试.

不是,声明直接

struct Pair;


extern的用法就是上面那个例子里那样!

#21
xianghui2007-05-09 15:10

谁知道在哪里下载C++的基础教程?

#22
ioriliao2007-05-09 17:35
以下是引用aipb2007在2007-5-9 13:37:08的发言:

不是,声明直接

struct Pair;


extern的用法就是上面那个例子里那样!

噢...明白了!

1