我正在尝试为类调用创建一个构造函数,其中4个数组作为参数传递。我尝试过使用*,&
和数组本身;但是,当我将参数中的值分配给类中的变量时,我收到此错误:
call.cpp: In constructor ‘call::call(int*, int*, char*, char*)’:
call.cpp:4:15: error: incompatible types in assignment of ‘int*’ to ‘int [8]’
call.cpp:5:16: error: incompatible types in assignment of ‘int*’ to ‘int [8]’
call.cpp:6:16: error: incompatible types in assignment of ‘char*’ to ‘char [14]’
call.cpp:7:16: error: incompatible types in assignment of ‘char*’ to ‘char [14]’
感谢您帮助我找到错误并帮助我纠正错误。 这是我的代码:
#ifndef call_h
#define call_h
class call{
private:
int FROMNU[8];
int DESTNUM[8];
char INITIME[14];
char ENDTIME[14];
public:
call(int *,int *,char *,char *);
};
#endif
call:: call(int FROMNU[8],int DESTNUM[8],char INITIME[14],char ENDTIME[14]){
this->FROMNU=FROMNU;
this->DESTNUM=DESTNUM;
this->INITIME=INITIME;
this->ENDTIME=ENDTIME;
}
答案 0 :(得分:4)
原始数组是不可分配的,通常很难处理。但是你可以在struct
内放一个数组,然后分配或初始化它。基本上就是std::array
是什么。
E.g。你可以做到
typedef std::array<int, 8> num_t;
typedef std::array<char, 14> time_t;
class call_t
{
private:
num_t from_;
num_t dest_;
time_t init_;
time_t end_;
public:
call_t(
num_t const& from,
num_t const& dest,
time_t const& init,
time_t const& end
)
: from_t( from ), dest_( dest ), init_( init ), end_( end )
{}
};
但是这仍然缺乏一些必要的抽象,所以它只是一个技术解决方案。
要改善一些事情,请考虑一下num_t
确实是。它可能是一个电话号码吗?然后按原样建模。
还考虑使用标准库容器std::vector
,对于char
,std::string
的数组。
答案 1 :(得分:1)
在C ++中可以将原始数组作为参数传递。
请考虑以下代码:
template<size_t array_size>
void f(char (&a)[array_size])
{
size_t size_of_a = sizeof(a); // size_of_a is 8
}
int main()
{
char a[8];
f(a);
}
答案 2 :(得分:0)
在C / C ++中,您不能通过执行this->FROMNU=FROMNU;
来分配数组,因此您的方法不起作用,并且是您错误的一半。
另一半是您尝试分配指向数组的指针。即使你将数组传递给一个函数,它们也会衰减到指向第一个元素的指针,不管你在定义中说了什么。