You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++函数默认参数使用报错:调用仅传非默认参数失败

问题解决:C++函数默认参数调用报错

你的问题出在默认参数的声明位置错误——C++要求函数的默认参数必须在函数的**声明(头文件)**中指定,而不是仅在定义(cpp文件)里设置。

错误原因

编译snafu()函数时,编译器只会参考头文件foo.h里的函数声明:

void bar(int, int, int);

这个声明里没有任何默认参数,所以编译器认为bar必须接收3个int参数,调用只传1个参数自然会报错C22660。

修正后的代码

头文件foo.h(修改声明,添加默认参数)

//foo.h
#pragma once
struct foo
{
  void bar(int, int = 1, int = 2); // 把默认参数放在声明里
  void snafu();
}; // 补上结构体末尾缺失的分号

实现文件foo.cpp(定义里可省略默认参数,编译器会忽略定义中的默认参数)

//foo.cpp
#include "foo.h"
void foo::bar(int x, int y, int z)
{
    // ... do stuff
}

void foo::snafu()
{
  bar(5); // 现在可正常调用,自动使用默认参数y=1,z=2
}

额外注意

  • 默认参数只能在函数的第一次声明中指定,后续声明或定义里重复指定会被编译器忽略,甚至可能触发警告。
  • 原代码中结构体定义末尾缺失分号;,属于语法错误,必须补上才能正常编译。

内容的提问来源于stack exchange,提问作者Jesse Knott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 05:32:35