【发布时间】:2015-08-13 20:35:56
【问题描述】:
我想,我正在尝试我的第一个 c++ 项目,并且从小做起。我正在使用 Eclipse Luna,并试图在我可以的任何地方采用默认的构建环境。我怀疑以下是不同的幼稚代码,但您必须从某个地方开始。
我最终将有 4 个合作/子项目:
- 静态库的命令行界面
- “.so”库将被动态加载到不同的盗版应用程序中并使用静态库
- 上面提到的一个静态库,它执行组合应用程序的后端工作。
- 一个实用程序类(现在,以后可能是一个小库),用于其他子项目通用的实用程序类和函数。
关于最佳实践、命名空间等有很多问题我想问,但我会尽量简短。
我有以下 c++ 头文件:
/*
* Utilities.h
*
*/
#ifndef UTILITIES_H_
#define UTILITIES_H_
// A
namespace UserTrackingUtilities {
// B
#include <string>
#include <exception>
using namespace std;
class MyException: public std::exception {
public:
MyException(std::string ss) : s(ss) {
}
~MyException() throw () {
} // Updated
std::string s;
const char* what() const throw () {
return s.c_str();
}
};
}
#endif /* UTILITIES_H_ */
这是一个异常实用程序(在不同的 StackOverflow 线程中找到),我将其包装在自己的命名空间中——我想。
Eclipse 显示此头文件存在几个问题。我将从一个开始:它不喜欢std::string 构造。我是否将#includes 和/或using 语句放在A 或B 点都没有关系。
我也尝试过使用 Linux GCC 和 ADT 工具链。
欢迎指点和建议。
【问题讨论】:
-
不要将
#include语句放在命名空间内。当我将#includes移动到指向A时,您的代码对我来说编译得很好。 -
别说
using namespace std;。 -
带有 CDT 的 Eclipse Luna 和 Mars 可以很好地吃掉该文件,即使在位置 B 包含包含和
using namespace std;。顺便说一句,using namspace std;死亡。