我使此标头包含一个类,用于确定最大的2分母(或多个数字,具体取决于所使用的函数)。编译时,出现以下错误:
,,cmmdc.h: In static member function 'static void teo::cmmdc<T>::CMMDC(T*, T&)': cmmdc.h:55:13: error: 'size_t' was not declared in this scope size_t ____sz = sizeof( ____num ) / sizeof( ____num [0] ) + 1 ; ^
编辑:此错误已解决。
在我有一个用size_t
声明的变量的任何地方都会出现此错误。这是完整的标头代码:
#ifndef TEO_CMMDC_H_
#define TEO_CMMDC_H_
#include <cstddef>
namespace teo
{
template <class T>
class cmmdc
{
public:
enum Algorithm
{
Euclid, Nichomahus
};
static Algorithm m_type;
private:
static T m_x, m_y, m_r;
public:
cmmdc()
{
}
static void CMMDC (T a, T b, T& result)
{
if(m_type==Euclid)
{
for(; b; m_x=a%b, a=b, b=m_x);
result=a;
}
else
{
for(; a!=b; (a>b?a=a-b:b=b-a));
result=a;
}
}
static void CMMDC(T& a, T b)
{
if(m_type==Euclid)
for(; b; m_x=a%b, a=b, b=m_x);
else
for(; a!=b; (a>b?a=a-b:b=b-a));
}
static T CMMDC_R(T a, T b)
{
if(m_type==Euclid)
for(; b; m_x=a%b, a=b, b=m_x);
else
for(; a!=b; (a>b?a=a-b:b=b-a));
return a;
}
static void CMMDC(T * num, T& res)
{
size_t sz=sizeof(num)/sizeof(num[0])+1;
if(m_type==Euclid)
{
for(size_ti=0;i<sz;i++)
{
(!m_x?m_x=num[i-1],m_y=num[i]:m_y=num[i]);
for(; m_y; m_r=m_x%m_y, m_x=m_y, m_y=m_r);
}
}
else
{
for(size_ti=0;i<sz;i++)
{
(!m_x?m_x=num[i-1],m_y=num[i]:m_y=num[i]);
for(; m_x!=m_y; (m_x>m_y?m_x=m_x-m_y:m_y=m_y-m_x));
}
}
res=m_x;
}
static T CMMDC(T * num)
{
size_t sz=sizeof(num)/sizeof(num[0])+1;
if(m_type==Euclid)
{
for(size_ti=0;i<sz;i++)
{
(!m_x?m_x=num[i-1],m_y=num[i]:m_y=num[i]);
for(; m_y; m_r=m_x%m_y, m_x=m_y, m_y=m_r);
}
}
else
{
for(size_ti=0;i<sz;i++)
{
(!m_x?m_x=num[i-1],m_y=num[i]:m_y=num[i]);
for(; m_x!=m_y; (m_x>m_y?m_x=m_x-m_y:m_y=m_y-m_x));
}
}
return m_x;
}
};
} // namespace teo
#endif /* TEO_CMMDC_H_ */
这是main.cpp文件:
#include <iostream>
#include "cmmdc.h"
int main()
{
int a, b, res;
std::cin>>a>>b;
teo::cmmdc<int>::m_type=teo::cmmdc<int>::Algorithm::Euclid;
teo::cmmdc<int>::CMMDC(a, b, res);
std::cout<<res;
}
修复了size_t
错误之后,此错误发生在main.cpp中:
,,C:\Users\...:main.cpp:(.rdata$.refptr._ZN3teo5cmmdcIiE3m_xE[.refptr._ZN3teo5cmmdcIiE3m_xE]+0x0): undefined reference to 'teo::cmmdc<int>::m_x' C:\Users\...:main.cpp:(.rdata$.refptr._ZN3teo5cmmdcIiE6m_typeE[.refptr._ZN3teo5cmmdcIiE6m_typeE]+0x0): undefined reference to 'teo::cmmdc<int>::m_type' collect2.exe: error: ld returned 1 exit status
编辑:包括确实解决了我的第一个问题,但第二个错误仍然存在。 编辑:问题已解决,感谢您指出重复。这些是我在课程结束后添加的代码行,以解决此问题:
template<class T>
typename cmmdc<T>::Algorithm cmmdc<T>::m_type;
template<class T>
T cmmdc<T>::m_x;
template<class T>
T cmmdc<T>::m_y;
template<class T>
T cmmdc<T>::m_r;
谢谢您的帮助!