作者tortoise (tortoise)
看板C_and_CPP
标题[问题] varadic function编译失败
时间Tue Mar 21 16:52:59 2017
想写一个最简单的varadic function p(需不定数目的整数为参数),
把输入的参数写到standard out,
但是连编译都有问题,找不到头绪,
google找到的都是varadic template,但我不想用template,
可以请大家帮忙看一下哪里错了吗?
(如果有违反板规麻烦告知,谢谢。)
//程式码
#include <iostream>
void _real(int i) {
std::cout << i << ",";
}
void p(int head, int... tail) {
_real(head);
p(tail...);
}
void p() {};
int main() {
p(3,5,1,3,7,2);
}
//错误讯息
$ g++ -std=c++11 print.cpp
print.cpp:6:25: error: expansion pattern ‘int’ contains no argument packs
void p(int head, int... tail) {
^
print.cpp: In function ‘void p(int)’:
print.cpp:8:7: error: ‘tail’ was not declared in this scope
p(tail...);
^
print.cpp: In function ‘int main()’:
print.cpp:14:18: error: no matching function for call to ‘p(int, int, int, int, int, int)’
p(3,5,1,3,7,2);
^
print.cpp:14:18: note: candidates are:
print.cpp:6:6: note: void p(int)
void p(int head, int... tail) {
^
print.cpp:6:6: note: candidate expects 1 argument, 6 provided
print.cpp:11:6: note: void p()
void p() {};
^
print.cpp:11:6: note: candidate expects 0 arguments, 6 provided
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 106.105.12.35
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1490086381.A.C67.html
1F:→ Caesar08: 不想用template,就只有C的va_list。那这样何必用C++? 03/21 17:05
2F:→ tortoise: 我只是在学习语法想了解哪里写错了,所以是没这语法吗 03/22 08:07
3F:→ tortoise: 既然c++11有varadic template,所以我猜想应该可拿掉 03/22 08:08
4F:→ tortoise: template,所以试写没有template的版本开始,想解决问题 03/22 08:08
5F:→ tortoise: 还是我误会了,c++11使用varadic一定要搭配template? 03/22 08:10
6F:推 Sidney0503: google "variadic function" 03/22 16:11
7F:→ Caesar08: 2种解法,一个是variadic template,一个是va_list 03/22 18:31