我正在研究一个问题,我要构建一个包含40个整数数组的类来计算40位数的加法和减法。
我写了下面的代码,但由于某种原因,它一直没有出现错误消息:
Implicit instantiation of undefined template 'std::_1::array<int, 40>'.
我不理解错误消息,并且没有看到代码的任何问题。你能帮忙吗?
另外,正如您所看到的,我正在使用memcpy函数,但是当我输入std::memcpy( hugeInteger, integer, sizeof( integer ) )
时,它会吐出No viable conversion from 'std::array<int, 40>' to 'void'.
据我所知,memcpy
接受指针,hugeInteger
是指向数组第一个元素的指针。我不正确理解吗?
以下是标题:
#ifndef __Chapter_9__HugeInteger__
#define __Chapter_9__HugeInteger__
#include <stdio.h>
#include <vector>
class HugeInteger
{
public:
explicit HugeInteger( bool = 1, std::array< int, 40 > = {} );
void setHugeInteger( std::array< int, 40 > );
void print();
private:
bool checkHugeInteger( std::array< int, 40 > );
std::array< int, 40 > hugeInteger = {};
bool sign;
};
#endif /* defined(__Chapter_9__HugeInteger__) */
以下是cpp:
#include <array>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include "HugeInteger.h"
HugeInteger::HugeInteger( bool sign, std::array< int, 40 > integer )
: sign(sign)
{
setHugeInteger( integer );
}
void HugeInteger::setHugeInteger( std::array< int, 40 > integer )
{
if ( checkHugeInteger( integer ) )
std::memcpy( hugeInteger, integer, sizeof( integer ) );
else
throw std::invalid_argument( "Single digit in the huge integer may not be negative ");
}
bool HugeInteger::checkHugeInteger( std::array< int, 40 > integer )
{
bool tester = 1;
for ( int i = int( integer.size() ) - 1; i >= 0; i-- )
{
if ( integer[i] < 0 )
{
tester = 0;
break;
}
}
return tester;
}
void HugeInteger::print()
{
if ( sign < 0 )
std::cout << "-";
for( int i = int( hugeInteger.size() ) - 1; i >= 0; i-- )
std::cout << hugeInteger[ i ];
}
答案 0 :(得分:4)
我没有使用您的确切代码来解决您提到的错误。但是,您的代码没有main
函数。所以我认为还有另一个.cpp
文件,你还没有提到它包含main
。如果是这样,则错误可能是因为该文件包含HugeInteger.h
而未执行#include <array>
。
HugeInteger.h
本身应该#include <array>
,而不是依赖其他包含者来做。{/ p>
要解决memcpy
问题,请将memcpy
行替换为:
hugeInteger = integer;
std::array
容器具有值语义,因此您可以分配它。
我还建议您更改接受array
的功能,以便通过const引用来接受它。这将避免在调用函数时不必要的副本。此外,checkHugeInteger
函数可能是static
,因为它不使用类的任何成员变量。