user-0 提问: CPP里的多源代码文件程序的编译，看过以前的贴，但都找不到解决方法

回复:
user: user-1
content: 程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。

user: user-2
content: 路径中不要有中文，不要有空格。

user: user-0
content: 引用 9 楼 赵4老师的回复:程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。 嗯嗯，所以都放在非系统盘上了

user: user-3
content: 引用 3 楼 bsnry 的回复:[quote=引用 2 楼 ant2012 的回复:] 全局变量和全局函数默认情况下的可见性是当前文件，要想跨文件访问，在声明时前加extern.  解决方法： 在hotel.h中的 int menu (void); int getnights (void); void showprice (double, int); 改为 extern int menu (void); extern int getnights (void); extern void showprice (double, int);  函数前面，extern可以默认不写。  估计楼主遭遇的问题，不是这个。  由于楼主是采用ide编译链接，所以不要判断。  但是从编译的输出结果来猜测：  host.c这个文件很可能没有添加到 codeblocks里。  建议楼主用gcc命令进行编译  gcc -o test  -g -Wall host.c main.c 试试这个命令再说。 [/quote] windows下改成这个： gcc -o test.exe   -g -Wall hotel.c main.c

user: user-3
content: 引用 2 楼 ant2012 的回复:全局变量和全局函数默认情况下的可见性是当前文件，要想跨文件访问，在声明时前加extern.  解决方法： 在hotel.h中的 int menu (void); int getnights (void); void showprice (double, int); 改为 extern int menu (void); extern int getnights (void); extern void showprice (double, int);  函数前面，extern可以默认不写。  估计楼主遭遇的问题，不是这个。  由于楼主是采用ide编译链接，所以不要判断。  但是从编译的输出结果来猜测：  host.c这个文件很可能没有添加到 codeblocks里。  建议楼主用gcc命令进行编译  gcc -o test  -g -Wall host.c main.c 试试这个命令再说。

user: user-4
content: 工程所在文件夹名中不要有空格、中文字符

user: user-5
content: 全局变量和全局函数默认情况下的可见性是当前文件，要想跨文件访问，在声明时前加extern.  解决方法： 在hotel.h中的 int menu (void); int getnights (void); void showprice (double, int); 改为 extern int menu (void); extern int getnights (void); extern void showprice (double, int);

user: user-6
content: 编译日志里面没有编译hotel.c,工程里没这文件吗

user: user-3
content: 引用 5 楼 lin747356460 的回复:[quote=引用 4 楼 bsnry 的回复:] [quote=引用 3 楼 bsnry 的回复:] [quote=引用 2 楼 ant2012 的回复:] 全局变量和全局函数默认情况下的可见性是当前文件，要想跨文件访问，在声明时前加extern.  解决方法： 在hotel.h中的 int menu (void); int getnights (void); void showprice (double, int); 改为 extern int menu (void); extern int getnights (void); extern void showprice (double, int);  函数前面，extern可以默认不写。  估计楼主遭遇的问题，不是这个。  由于楼主是采用ide编译链接，所以不要判断。  但是从编译的输出结果来猜测：  host.c这个文件很可能没有添加到 codeblocks里。  建议楼主用gcc命令进行编译  gcc -o test  -g -Wall host.c main.c 试试这个命令再说。 [/quote] windows下改成这个： gcc -o test.exe   -g -Wall hotel.c main.c  [/quote] 我刚学C不久，这些要敲的指令不知道哪里搞。 不过我把hotel.c main.c都放在一个工程的源文件了， 现在不知道问题在哪里，我把可能出现问题的地方都放上来先。   [/quote]  没用过codeblocks  如果你对命令不熟悉的话，可以无视我的回答。因为我的回答只会误导你。  还有，如果你觉得这个问题依然无法解决的话，我建议你学习如何使用codeblocks. 这恐怕才是解决问题的根本。  代码似乎没有问题。  还有，如果在windows下，由于你的代码并没有涉及到 linux的api 的调用  所以可以暂时用visual studio 2015(微软的最新的开发工具）来编译代码。  2015甩开vc6很多条街，检测代码也是非常严格的。  当然这是权宜之计。

user: user-0
content: 引用 4 楼 bsnry 的回复:[quote=引用 3 楼 bsnry 的回复:] [quote=引用 2 楼 ant2012 的回复:] 全局变量和全局函数默认情况下的可见性是当前文件，要想跨文件访问，在声明时前加extern.  解决方法： 在hotel.h中的 int menu (void); int getnights (void); void showprice (double, int); 改为 extern int menu (void); extern int getnights (void); extern void showprice (double, int);  函数前面，extern可以默认不写。  估计楼主遭遇的问题，不是这个。  由于楼主是采用ide编译链接，所以不要判断。  但是从编译的输出结果来猜测：  host.c这个文件很可能没有添加到 codeblocks里。  建议楼主用gcc命令进行编译  gcc -o test  -g -Wall host.c main.c 试试这个命令再说。 [/quote] windows下改成这个： gcc -o test.exe   -g -Wall hotel.c main.c  [/quote] 我刚学C不久，这些要敲的指令不知道哪里搞。 不过我把hotel.c main.c都放在一个工程的源文件了， 现在不知道问题在哪里，我把可能出现问题的地方都放上来先。