C++ 未能在my.cpp文件中正确使用命名空间

C++ 未能在my.cpp文件中正确使用命名空间,c++,C++,我在MYTIME.h文件中声明了一个名称空间MYTIME #include<ostream> #ifndef _TIME_H #define _TIME_H namespace MYTIME{ class time { ... }; } #endif 当我使用g++time.cpp编译时,错误如下 time.cpp:8:17: error: ‘MYTIME’ is not a namespace-name

我在
MYTIME.h
文件中声明了一个名称空间
MYTIME

#include<ostream>
#ifndef _TIME_H
#define _TIME_H

namespace MYTIME{
        class time
        {
             ...
        };
}
#endif
当我使用
g++time.cpp
编译时,错误如下

time.cpp:8:17: error: ‘MYTIME’ is not a namespace-name
 using namespace MYTIME;
                 ^~~~~~
time.cpp:8:23: error: expected namespace-name before ‘;’ token
 using namespace MYTIME;
                       ^
time.cpp:10:1: error: ‘time’ does not name a type
 time::time()

time.cpp:31:6: error: ‘time’ is not a class, namespace, or enumeration
 void time::addSec(long int s)
time.cpp: In function ‘void addSec(long int)’:
time.cpp:34:7: error: ‘seconds’ was not declared in this scope
  m = (seconds + s) / 60;
       ^~~~~~~
time.cpp:34:7: note: suggested alternative: ‘useconds_t’
  m = (seconds + s) / 60;
       ^~~~~~~
       useconds_t
   ... // many same errors

我哪里做错了?如何修复它?正在寻求帮助。

您的标题保护正在使用已定义的名称。因此,您的命名空间和类永远不会被声明

一个简单的测试演示了问题:

#include <iostream>

int main()
{
#ifdef _TIME_H
    std::cout << "Well, well, well...\n";
#endif
}
要解决这个问题,您应该使用更具唯一性的命名头,而不要尝试使用标准库使用的命名约定。特别是,在前缀中加下划线通常不是一个好主意


如果你的编译器支持<>代码>语法>曾经是 >你可能想考虑使用它。

你确信<代码> MyTime.H./C>确实被正确地包含了吗?您是否在正确的文件中写入
名称空间MYTIME
?这就是所有显示的错误吗?是的,我确信
mytime.h
也包括在内,因为类
time
无法正确识别,所以有很多相同的错误。以
\uuu
开头的标识符是保留的,iirc。不要用一个定义来定义。关于下划线前缀,我知道它们是用C保留的,但是我不知道C++中执行这个是不是?“我一直避免使用它们,但更多的是出于习惯,”帕迪,这不是强制的;但是,它们是为编译器保留的,因此最终会导致名称冲突。我没有这个标准,但我认为它只是从
\uuu
开始,尽管后面可能有一个大写字母。我不记得了。非常感谢,这确实有效,但出现了一些新错误,看起来
time
会造成歧义,但是
time
在名称空间MYTIME中,为什么仍然发生错误?毫无疑问,在从未编译过的新代码中会出现错误。您的任务是处理错误并修复它们。这超出了您的问题范围,您的问题是询问一个您难以诊断的特定错误。常用名称的歧义是随意导入整个名称空间的副作用。出于这个确切的原因,我个人不使用
使用namespace
子句。我更喜欢将特定名称作为别名导入(使用
子句或
typedef
)并完全限定其他所有内容。对于CPP文件中的定义,整个类实现应该包装在
名称空间MYTIME{…}
中。@Yongy vers,使用名称空间std删除
也会导致名称冲突。
#include <iostream>

int main()
{
#ifdef _TIME_H
    std::cout << "Well, well, well...\n";
#endif
}
Well, well, well...