首页 > 解决方案 > < 标记之前的预期初始化程序 - 结构和模板

问题描述

我在练习我的一本编程书籍中的列表时遇到了这个确切的错误......我真的不知道;mb 我是盲人或某事。请帮忙。我尝试了各种其他组合,但下面的这个组合似乎对我必须做的事情最为明显。仍然没有类,所以我想知道它是否以某种方式连接到 using namespace std。

EDIT#1 忘记在哪一行添加:11、22

#include <iostream>
template <typename T>
void swap (T &a, T &b);

struct job{
    char name[40];
    double salary;
    int floor;
};

template <> void Swap<job>(job &j1, job &j2);
void Show(job &j);

int main(){
    using namespace std;
    cout.precision(2);
    cout.setf(ios::fixed, ios::floatfield);
    int i = 10, j = 20;
    cout << "i, j =" << i << ", " << j << ".\n";
    cout << "Using generated by compiler function "
            "changing int value:\n";
    Swap(i,j);
    cout << "Now i, j = " << i << ", " << j << ".\n";
    job sue = {"Susan Yaffee", 73000.60, 7};
    job sidney = {"Sidney Taffee", 78060.72, 9};
    cout << "Before changing job structure:\n";
    Show(sue);
    Show(sidney);
    Swap(sue, sidney);
    cout << "After changing job structure:\n";
    Show(sue);
    Show(sidney);
    cin.get();
    return 0;
}

template <typename T>
void Swap(T &a, T &b){
    using namespace std;
    T temp;
    temp = a;
    a = b;
    b = temp;
}

template <> void Swap<job>(job &j1, job &j2){
    using namespace std;
    double t1;
    int t2;
    t1 = j1.salary;
    j1.salary = j2.salary;
    j2.salary = t1;
    t2 = j1.floor;
    j1.floor = j2.floor;
    j2.floor = t2;
}

void Show(job &j){
    using namespace std;
    cout << j.name << ": " << j.salary << "$ at floor " << j.floor << endl;
}

标签: c++c++11

解决方案


#include <iostream>
template <typename T>
void swap (T &a, T &b);

很确定你的意思是Swap这里。

没有它,后续的特化就无法编译。

和 是不同的swapSwap因为 C++ 区分大小写。

从你的书中抄录时要小心。


推荐阅读