我写过一个Cell课程。当我使用默认参数编写构造函数作为内联函数时,没有问题
cell.h
Class Cell{
public:
Cell(int x, int y, char sign='.'):X(x), Y(y), Sign(sign){}
};
但是,如果我想在我的源文件中移动该实现,如下所示:
cell.h
Class Cell{
public:
Cell(int x, int y, char sign='.');
};
cell.cpp
Cell::Cell(int x, int y, char sign='.'):X(x), Y(y), Sign(sign){}
编译说:
Reversi.cpp:1144:43: error: default argument given for parameter 3 of ‘Cell::Cell(int, int, char)’ [-fpermissive]
Cell::Cell(int x, int y, char sign='.'):X(x), Y(y), Sign(sign){}
^
In file included from Reversi.cpp:7:0:
Reversi.h:16:5: note: previous specification in ‘Cell::Cell(int, int, char)’ here
Cell(int x, int y, char sign='.');
^
答案 0 :(得分:0)
您正尝试在两个文件中指定默认参数。只在头文件中执行,编译器将停止抱怨。
cell.h
Class Cell
{
public:
Cell(int x, int y, char sign);
};
cell.cpp
Cell::Cell(int x, int y, char sign='.'):X(x), Y(y), Sign(sign)
{
}
答案 1 :(得分:0)
仅在标题中类定义中的成员函数声明中指定默认参数。否则,包含标题的所有其他模块都不会知道默认参数。
您不能在同一声明区域中多次为同一参数声明默认参数,编译器会说明这一点。
答案 2 :(得分:0)
您无法创建两个实现或提供两个版本的默认参数。
您应该在头文件中提供默认参数,并在头文件或对应的cpp文件中提供内联实现。
cell.h
#pragma once
class Cell {
public:
Cell(int x, int y, char sign = '.');
int X;
int Y;
char Sign;
};
cell.cpp
#include "cell.h"
Cell::Cell(int x, int y, char sign): X(x), Y(y), Sign(sign) {}