主题:用g++编译的c++程序怎样引用外部类的static 变量? -- 金口玉言
用g++编译的c++程序怎样引用外部类的static 变量?
不好意思,头一次用g++,在VC下可以编译的程序,在g++下却不行。
主程序:
#include <stdio.h>
#include <SSS.h>
int main()
{
printf("hello\n");
printf("%d",SSS::T);
}
外部类的SSS.h文件
#include <vector>
class SSS
{
public:
SSS(void);
static float S,K,r,h,b,p;
static int T;
static void reset();
public:
~SSS(void);
};
外部类SSS.cpp文件:
#include "SSS.h"
float SSS::K=100;
float SSS::S=105;
float SSS::b=-0.03;
float SSS::r=0.03;
float SSS::h=0.05;
int SSS::T=3;
float SSS::p=(h-r)/(h-b);
SSS::SSS(void)
{
}
void SSS::reset(void)
{
::std::vector<int> v;
v.reserve(10);
v.push_back(100);
}
SSS::~SSS(void)
{
}
编译的时候出错如下:
stl@ubuntu:~/hhh$ g++ -o hh Hello.cpp SSS.cpp
Hello.cpp:2:17: error: SSS.h: No such file or directory
Hello.cpp: In function ‘int main()’:
Hello.cpp:7: 错误: ‘SSS’ 未声明
Hello.cpp:7: 错误: ‘T’ 在此作用域中尚未声明
请各位大大指教怎么回事阿??非常感谢!!
试试
gcc/g++ 命令有个 -include (外部文件)的选项;只是建议,没有任何把握。也没有环境测试。
你换成#include "SSS.h"试试。
1.把sss.h的path 写入程序。
例.
#include “/home/wukw/cplus/h/sss.h”
天边一只猴的看法应该是对的。
#include <SSS.h>
stdio.h是系统带的,所以用<>,而SSS.h是你自己写的放在当前目录下吧,如果是这样,应该用“”
答:对于#include <filename.h> ,编译器从标准库路径开始搜索 filename.h
对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h
昨天在一个linux的C++论坛上也提问了,都没有一个人理我。想了想,还是到河里来提问。西河确实学历高啊!而且你看天边那个猴子解问题那个自信的口气,还真是没见过。。。
ps,以前就知道include "" 和<>有一个小小区别,但是没记住是什么区别。结果今天就碰上了,印象深刻啊。
再次感谢,一人一朵花!
is a very good (and short) reference on GNU compiler gcc and g++. You can google to download it.
VC的option那里设置了一大堆路径,g++需要自己设置吧
C++ How to Program, 5th edition, page 98, Section 3.8.
" How Header Files Are Located
Notice that the name of the GradeBook.h header file in line 7 of Fig. 3.10 is enclosed in quotes (" ") rather than angle brackets (< >). Normally, a program's source-code files and user-defined header files are placed in the same directory. When the preprocessor encounters a header file name in quotes (e.g., "GradeBook.h"), the preprocessor attempts to locate the header file in the same directory as the file in which the #include directive appears. If the preprocessor cannot find the header file in that directory, it searches for it in the same location(s) as the C++ Standard Library header files. When the preprocessor encounters a header file name in angle brackets (e.g., <iostream>), it assumes that the header is part of the C++ Standard Library and does not look in the directory of the program that is being preprocessed. "
"Error-Prevention Tip 3.3
To ensure that the preprocessor can locate header files correctly, #include preprocessor directives should place the names of user-defined header files in quotes (e.g., "GradeBook.h") and place the names of C++ Standard Library header files in angle brackets (e.g., <iostream>)."
以后能不能在这版多讨论一些类似的技术问题。目前的信息技术基本是信息技术“轶事”。
也可能很多人更喜欢消遣,在工作外尽量忘记那些折磨人的东西,各取所需吧。
在西西河就不是干这个的,捎带着谈一下还行。
在古早古早的著名的K&R版C Programming Language 就讲过了。
哪位大侠能给点经验?
本人大学学自控的,大学里C语言还学得不错,88分.但是大学毕业后用汇编工作,没有机会用C/C++,但是现在想自学一下C, 希望能尽量提高C的水平, 大家能否给点建议, 应该用什么教材,什么编译软件, 如何调试, 如何找资料....
没有经验, 还请大家不吝赐教.
The classical textbook on C programming language is Kernighan and Ritechie (K&R), The C Programming Language, 2nd edition. The official website is 外链出处.
For free download, try 外链出处. Click on the category: C.
The exercise problems are very good and worth of doing.
For the compiler, a very easy-to-use one is Bloodshed Dev C++ compiler 外链出处.
It's IDE and should be sufficient for doing the problems in K&R. If you need to compile and link several files together, GNU gcc is better. You can download it at 外链出处 .