C++ gcc在一台计算机上编译而不是在另一台计算机上编译时出错

C++ gcc在一台计算机上编译而不是在另一台计算机上编译时出错,c++,gcc,gcc-warning,C++,Gcc,Gcc Warning,我有一个在两台Ubuntu电脑上编译的程序。两者都运行14.04,可能是同一版本的gcc。但是当我在一台计算机上编译它时,我得到了错误 warning: format ‘%i’ expects argument of type ‘int’, but argument 4 has type ‘std::vector<colorgrad>::size_type {aka long unsigned int}’ [-Wformat=] 警告:格式“%i”要求参数类型为“int”,但参数

我有一个在两台Ubuntu电脑上编译的程序。两者都运行14.04,可能是同一版本的gcc。但是当我在一台计算机上编译它时,我得到了错误

warning: format ‘%i’ expects argument of type ‘int’, but argument 4 
has type ‘std::vector<colorgrad>::size_type {aka long unsigned int}’ [-Wformat=]
警告:格式“%i”要求参数类型为“int”,但参数类型为4
具有类型“std::vector::size_type{aka long unsigned int}”[-Wformat=]
我认为违规的代码是

for (vector<colorgrad>::size_type i = 0; i < grad.size(); ++i) {

    fprintf(svgOut, "%s%i%s%f%srgb(%i, %i, %i)%s\n", "<stop id=\"stop", i,"\" offset=\"",grad.at(i).perc ,"\" style=\"stop-color: ",grad.at(i).r, grad.at(i).g, grad.at(i).b, ";stop-opacity:1;\" />" );

}
(vector::size_type i=0;i 当我将第一个“%I”替换为“%lu”时,错误就会消失,但当我在另一台计算机上编译该代码时,gcc会给出相反的错误,并且只使用“%I”进行编译


如何在两台计算机上编译此代码,而不必每次切换计算机时都切换“%I”?

如注释
vector::size\u t
中所述,取决于平台,可能是32位或64位 而格式
%zu
可以管理它

或者,您可以写一些类似的内容:
(我使用C++11作为范围、原始字符串(不必转义
\”
),但也可以在C++03中完成)

std::of Stream oss;//使用正确的值初始化它
标准:尺寸i=0;
用于(常量自动和颜色:渐变){

OSS大概是你的一台计算机运行64位Ubuntu,另一台运行32位。参见。但是由于没有太大的跨平台的故事,也考虑使用IOFFROW代替FPRTTF。使用<代码> %ZU < /代码> <代码> SiZeZyType < /代码>。
std::ofstream oss; // initialize it with correct value
std::size_t i = 0;
for (const auto& color : grad) {
    oss << R"(<stop id="stop)" << i << R"(" offset=")" << color.perc
        << R"(" style="stop-color: rgb()"
        << color.r << ", " << color.g << ", "<< color.b
        << R"();stop-opacity:1;" />)" "\n"; // you may replace "\n" by std::endl
    ++i;
}