未在此范围中声明<insert name of struct>

Mil*_*dan 1 c++ struct

http://pastebin.com/4gvcQm7P

#include <iostream>

using namespace std;

int GenerateID()
{
    static int nextID = 0;
    return nextID++;
}

void PrintInformation(Employee EmployeeName)
{
    cout << EmployeeName << "'s ID is: " << EmployeeName.ID << endl;
    cout << EmployeeName << "'s age is: " << EmployeeName.age << endl;
    cout << EmployeeName << "'s wage is: " << EmployeeName.wage << endl;
}

int main()
{

    struct Employee
    {
        int ID;
        int age;
        float wage;
    };

    Employee Dominic;
    Employee Jeffrey;

    Dominic.ID = GenerateID();
    Dominic.age = 22;
    Dominic.wage = 7.10;

    Jeffrey.ID = GenerateID();
    Jeffrey.age = 28;
    Dominic.wage = 7.10;

    PrintInformation(Dominic);
    PrintInformation(Jeffrey);

    return 0;
}

/*
C:\CBProjects\Practise\main.cpp|11|error: variable or field 'PrintInformation' declared void|
C:\CBProjects\Practise\main.cpp|11|error: 'Employee' was not declared in this scope|
C:\CBProjects\Practise\main.cpp||In function 'int main()':|
C:\CBProjects\Practise\main.cpp|39|error: 'PrintInformation' was not declared in this scope|
||=== Build finished: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|
*/
Run Code Online (Sandbox Code Playgroud)

上面的pastebin链接显示了我使用的代码和构建报告.在此报告之后,我尝试转发声明结构而不包含成员,然后出现"不完整类型"错误.

解决办法是什么?

编辑:我正在使用c ++ 11

编辑2:如果我尝试转发声明结构,包括成员,会发生以下情况:

http://pastebin.com/rrt4Yjes#

Dan*_*rey 6

有两种解决方案:Employee创建非本地类/结构或创建PrintInformation模板.对于第一种解决方案,只需移动Employee 之前 PrintInformation.第二个解决方案是:

template< typename Employee >
void PrintInformation(const Employee& EmployeeName)
{
    cout << " EmployeeName's ID is: " << EmployeeName.ID << endl;
    cout << " EmployeeName's age is: " << EmployeeName.age << endl;
    cout << " EmployeeName's wage is: " << EmployeeName.wage << endl;
}
Run Code Online (Sandbox Code Playgroud)

请注意,在任何情况下,您都不希望Employee只打印一些信息的副本,因此PrintInformation如上所示,使参数成为常量引用.