我现在正在研究Vertorization性能测试,但遇到以下错误
1> ConsoleApplication2.obj:错误LNK2001:无法解析的外部符号“专用:静态联合_LARGE_INTEGER Timer :: m_freq”(?m_freq @ Timer @@ 0T_LARGE_INTEGER @@ A)
1> ConsoleApplication2.obj:错误LNK2001:无法解析的外部符号“私有:静态__int64 Timer :: m_overhead”(?m_overhead @ Timer @@ 0_JA)
1> c:\ users \ lara feodorovna \ documents \ Visual Studio 2012 \ Projects \ ConsoleApplication2 \ Debug \ ConsoleApplication2.exe:致命错误LNK1120:2无法解析的外部
--------------- timer.h(我手动添加了)---------------
#pragma once
#include <windows.h>
struct Timer
{
void Start()
{
QueryPerformanceCounter(&m_start);
}
void Stop()
{
QueryPerformanceCounter(&m_stop);
}
// Returns elapsed time in milliseconds (ms)
double Elapsed()
{
return (m_stop.QuadPart - m_start.QuadPart - m_overhead) \
* 1000.0 / m_freq.QuadPart;
}
private:
// Returns the overhead of the timer in ticks
static LONGLONG GetOverhead()
{
Timer t;
t.Start();
t.Stop();
return t.m_stop.QuadPart - t.m_start.QuadPart;
}
LARGE_INTEGER m_start;
LARGE_INTEGER m_stop;
static LARGE_INTEGER m_freq;
static LONGLONG m_overhead;
};
--------------------- ConsolApplication2.cpp -----------------------
#include "stdafx.h"
#include "timer.h"
const int MAXNUM = 100000;
int a[MAXNUM];
int b[MAXNUM];
int c[MAXNUM];
int _tmain(int argc, _TCHAR* argv[])
{
Timer timer;
double time_NoVector;
double time_Vector;
//No Vectorization
timer.Start();
#pragma loop(no_vector)
for (int j=0; j<MAXNUM; j++)
{
c[j]=a[j]+b[j];
}
timer.Stop();
time_NoVector=timer.Elapsed();
//Vectorization
timer.Start();
for(int j=0; j <MAXNUM; j++)
{
c[j] = a[j] + b[j];
}
timer.Stop();
time_Vector=timer.Elapsed();
printf("---------------------------------------------\n");
printf("%-14s %10s %10s\n", "Version", "Times(s)", "Speedup");
printf("---------------------------------------------\n");
printf("%-14s %10.4f %10.4f\n", "NoVector", time_NoVector, 1.0);
printf("%-14s %10.4f %10.4f\n\n", "Vector", time_Vector, time_NoVector / time_Vector);
return 0;
}
请帮我
最佳答案
如果static
中有class
个成员,则必须在翻译单元中对其进行定义。
在标题中:
struct Timer
{
// ...
// Declaration of your static members
static LARGE_INTEGER m_freq;
static LONGLONG m_overhead;
};
在.cpp文件中:
// Definitions
LARGE_INTEGER Timer::m_freq;
LONGLONG Timer::m_overhead;
尊重One Definition Rule。
关于c++ - VS 2012错误LNK2001:无法解析的外部符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18671454/