我一直试图找出我在以下代码中面临的问题。
#include <iostream>
#include <stdarg.h>
#include <vector>
using namespace std;
template <typename T>
class C {
vector<T> vec;
public:
void PrintValues(int size, T val, ...){
va_list v;
va_start(v,val);
for ( int i = 0 ; i < size ; i++ ) {
T p = va_arg(v,T);
vec.push_back(p);
cout<<p<<" ";
}
va_end(v);
}
};
int main() {
C<int> a;
C<char *> b;
cout<<endl;
a.PrintValues(10,1,4,6,2,8,5,3,7,10,9);
cout<<endl;
b.PrintValues(10,"a","b","c","d","e","f","g","h","i","j");
cout<<endl;
return 0;
}
我使用 g++ 4.4.3 在我的 Ubuntu 10.04 桌面上编译了这段代码。
使用以下警告编译的代码
testcode.cpp: In function ‘int main()’:
testcode.cpp:25: warning: deprecated conversion from string constant to ‘char*’
虽然我期待像这样的输出
1 4 6 2 8 5 3 7 10 9
a b c d e f g h i j
我实际上得到了以下输出
4 6 2 8 5 3 7 10 9 0
b c d e f g h i j `*@
有人可以向我提供一些关于为什么跳过列表中的第一个元素的指示吗?我知道我也可以在不使用变量参数列表的情况下做同样的事情,但我只是在尝试这是否可行。