Visual Studio报"Redefinition of default argument: parameter 2"错误的解决咨询
错误解释与修复方案
错误含义
C++规定函数的默认参数只能在声明(头文件)或定义(cpp文件)中定义一次,不能在两处重复设置。你的代码里,Image和Font函数已经在头文件中给第二个参数extension指定了默认值,但在cpp的函数定义里又重复写了这个默认参数,这就导致编译器抛出"Redefinition of default argument: parameter 2"错误。另外还存在一个拼写错误:头文件中Font函数的参数extensino应为extension,这也会引发编译问题。
修复步骤
- 删除cpp文件中函数定义的默认参数:默认参数只需要在头文件的函数声明中保留即可,cpp定义里仅写参数名称。
- 修正头文件的拼写错误:将
Font函数的参数名extensino改为extension。
修复后的代码
头文件(Paths.hpp)
#pragma once #include <string> using namespace std; class Paths { private: public: Paths(); string Image(string key, string extension = "png"); string Font(string key, string extension = "TTF"); // 修正拼写错误 };
cpp文件(Paths.cpp)
#include "Paths.hpp" Paths::Paths() { } string Paths::Image(string key, string extension) // 移除默认参数 { return "data/images/" + key + "." + extension; } string Paths::Font(string key, string extension) // 移除默认参数 { return "data/fonts/" + key + "." + extension; }
额外说明
如果需要给第一个参数key也添加默认值,只需在头文件的函数声明中设置即可,cpp定义中依然不要重复写默认参数。例如头文件可以修改为:
string Image(string key = "nullImage", string extension = "png"); string Font(string key = "NULLFONT", string extension = "TTF");
内容的提问来源于stack exchange,提问作者SoyKiokin
相关产品推荐
相关产品推荐

