【发布时间】:2013-05-09 17:04:45
【问题描述】:
我的 printf 有点问题,我不知道为什么!
=>kernel.h
#ifndef KERNEL_H
#define KERNEL_H
namespace kernel
{
extern const double h;
}
#endif // KERNEL_H
=>kernel.cpp
#include <kernel.h>
namespace kernel
{
const double kernel::h=85.0;
}
=>main.cpp
#include "kernel.h"
#include <iostream>
//#include <cstdio>//With cstdio, it is the same problem !
int main(int argc, char *argv[])
{
using namespace kernel;
double a = h;
printf("printf a is %d\n",a);
std::cout<<"std::cout a is " << a << std::endl;
printf("printf h is %d\n",h);
printf("printf kernel::h is %d\n",kernel::h);
std::cout << "std::cout h is " << h << std::endl;
return 0;
}
我在控制台上的输出是:
printf a is 0
std::cout a is 85
printf h is 0
printf kernel::h is 0
std::cout h is 85
为什么 printf 不起作用?因为它是一个C函数?
谢谢
【问题讨论】:
-
真的有必要在kernel.cpp中包含kernel.h吗?
-
不是报错,而是cpp文件中定义过多。您可以执行
const double kernel::h=85.0(无需重新打开命名空间),或者仅执行const double h=85.0(如果您重新打开它)。你有点“两者都做了”,这是多余的。
标签: c++ namespaces printf extern cout