持有代码的项目具有所有默认的MSVS2008设置。
考虑以下代码,我熟悉STL的各种产品:
#include <vector>
#include <iostream>
#include <numeric>
using namespace std;
template <class T> void print(const vector<T>& l)
{ // A generic print function for vectors
cout << endl << "PV Size of vector is " << l.size() << "\n[";
for(int i = 0; i < l.size(); i++)
{
cout<<l[i]<<",";
}
cout << "]\n";
}
int main()
{
vector<double> vec1(4, 2.0);
vector<double> vec2(4, 4.0);
double init = 0.0;
double summation = accumulate(vec1.begin(), vec1.end(), init);
cout<<"Summation = "<<summation<<", init is "<<init<<endl;
double ip = inner_product(vec1.begin(), vec1.end(), vec2.begin(), init);
cout<<"ip = "<<ip<<", init is "<<init<<endl;
int size = 6;
int seed_value = 2;
vector<int> vec3(size, seed_value);
vector<int> result(size);
partial_sum(vec3.begin(), vec3.end(), result.begin());
cout<<"The partial sum of vec3 is ";
print(vec3);
int sz = 10;
int value = 2;
vector<int> vec4(sz);
for(int it = 0; it < vec4.size(); it++){
vec4[it] = value;
value++;
}
vector<int> result2(vec4.size());
adjacent_difference(vec4.begin(), vec4.end(), result2.begin());
cout<<"Adjacent differenec of vec4 is ";
print(vec4);
return(0);
}
我第一次尝试运行它(在Windows 7下,Visual Studio 2008),我收到以下错误:
c:\programming\numeric_algorithms_on_vectors.cpp(86) : warning C4018: '<' : signed/unsigned mismatch
c:\programming\numeric_algorithms_on_vectors.cpp(37) : warning C4018: '<' : signed/unsigned mismatch
c:\programming\numeric_algorithms_on_vectors.cpp(81) : see reference to function template instantiation 'void print(const std::vector<_Ty> &)' being compiled
with
[
_Ty=int
]
Linking...
numeric_algorithms_on_vectors.obj : fatal error LNK1000: Internal error during IncrCalcPtrs
Version 9.00.30729.01
ExceptionCode = C0000005
ExceptionFlags = 00000000
ExceptionAddress = 00E6B8C0 (00E10000) "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\link.exe"
NumberParameters = 00000002
ExceptionInformation[ 0] = 00000000
ExceptionInformation[ 1] = 0000001C
CONTEXT:
Eax = 00000000 Esp = 0042EAE8
Ebx = 3FFF0000 Ebp = 0042EB04
Ecx = 77CB36FA Esi = 4000AF9C
Edx = 4000F774 Edi = 00000000
Eip = 00E6B8C0 EFlags = 00010293
SegCs = 00000023 SegDs = 0000002B
SegSs = 0000002B SegEs = 0000002B
SegFs = 00000053 SegGs = 0000002B
Dr0 = 00000000 Dr3 = 00000000
Dr1 = 00000000 Dr6 = 00000000
Dr2 = 00000000 Dr7 = 00000000
然而,在点击窗口告诉我我的代码没有编译/正常工作后,当我再次调试相同的代码而不对代码进行任何更改时,该程序正常工作。有没有理由为什么代码第一次不会编译/链接/运行,但下次运行时会完全正常?
答案 0 :(得分:3)
这是VS2008 SP1链接器中的已知问题。已在VS2010中修复了反馈报告is here。
我自己已经看过几次这种情况,只有当它实际上以递增方式链接时才会发生。对我来说,它总是通过Build + Rebuild强制完整构建来解决自己,以便删除并重新创建.ilk文件。如果仍然不适合您,则可以使用Project + Properties,Linker,General,Enable Incremental Linking关闭该功能。