这是我的头文件,auto vs static.h
#include "stdafx.h"
#include <iostream>
void IncrementAndPrint()
{
using namespace std;
int nValue = 1; // automatic duration by default
++nValue;
cout << nValue << endl;
} // nValue is destroyed here
void print_auto()
{
IncrementAndPrint();
IncrementAndPrint();
IncrementAndPrint();
}
void IncrementAndPrint()
{
using namespace std;
static int s_nValue = 1; // fixed duration
++s_nValue;
cout << s_nValue << endl;
} // s_nValue is not destroyed here, but becomes inaccessible
void print_static()
{
IncrementAndPrint();
IncrementAndPrint();
IncrementAndPrint();
}
这是我的主文件,namearray.cpp
#include "stdafx.h"
#include <iostream>
#include "auto vs static.h"
using namespace std;
int main(); // changing this to "int main()" (get rid of ;) solves error 5.
{
print_static();
print_auto();
cin.get();
return 0;
}
我正在尝试打印(cout) 2 2 2 2 3 4
错误:
我觉得我的错误就是在头文件中使用void。如何更改头文件以使我的代码能够正常工作?
参考:来自learncpp的代码
答案 0 :(得分:7)
您不能声明具有相同名称和参数的两个函数。
void IncrementAndPrint()
答案 1 :(得分:5)
与变量不同,您无法为函数赋予新值。所以这就是编译器的想法:
“哦,好的,当你说IncrementAndPrint
时,你的意思是这个函数位于文件的顶部”。
然后它会看到print_auto
并了解这意味着什么。但是你试着告诉它IncrementAndPrint
实际上意味着另一个函数,并且编译器会感到困惑。 “但你已经告诉我IncrementAndPrint
的意思!”,编辑抱怨道。
这与变量(在某种程度上)形成鲜明对比,你可以说:
int x = 0;
x = 6;
编译器理解,x
在某一时刻具有值0
,但您现在说“x
不同,这意味着6
。”。但是,你不能说:
int x = 0;
int x = 6;
因为当您在变量名称之前包含类型时,您正在定义一个新变量。如果您不包含类型,则只需指定旧类型。
您必须为IncrementAndPrint
提供不同的名称。
或者,您可以让他们采用不同的参数,例如void IncrementAndPrint(int x);
与void IncrementAndPrint(double y);
。我不建议这里,因为你不需要参数。
另一种可能性是使用namespace。它看起来像这样:
namespace automatic_variables {
void IncrementAndPrint() {
// automatic variable version
}
void print() {
// automatic version
}
}
namespace static_variables {
void IncrementAndPrint() {
// static variable version
}
void print() {
// static version
}
}