#include <iostream>
#define NO-EXTER
typedef int snow;
typedef void shells;
typedef char byteUendedLin;
typedef short ANDNOOP;
shells drawsnake(snow size, byteUendedLin *Height__Maskm_, ANDNOOP &Filesz_9Err);
snow main(snow args, byteUendedLin**LOC[])
{
byteUendedLin *ANDNOEXpfortopoflist[1];
snow nCagado;
byteUendedLin *NOTOPS2s3_filenam;
drawsnake(nCagado, ANDNOEXpfortopoflist, NOTOPS2s3_filenam);
}
shells drawsnake(snow size, byteUendedLin *Height__Maskm_, ANDNOOP &Filesz_9Err);
{
ANDNOOP Firstbad = 300;
if(size(Height_Maskm_) >= Firstbad)
{
return;
}
}
}
输出:
1
2
3
4
Line 10: error: missing whitespace after the macro name
In function 'snow main(snow, byteUendedLin***)':
Line 13: error: cannot convert 'byteUendedLin**' to 'byteUendedLin*'
for argument '2' to 'shells drawsnake(snow, byteUendedLin*, ANDNOOP&)'
compilation terminated due to -Wfatal-errors.
似乎错误没有意义......它是什么意思不能将byteUendedLin转换为指针?我不明白!
PS:原谅格式;我正在使用typedef作为实验。
答案 0 :(得分:3)
ANDNOEXpfortopoflist
是一个指针数组,它会衰减到指向指针的指针,因为你将它作为参数传递。见How do I use arrays in C++?
您无法将T**
转换为T*
,因为T**
无法转换为T*
。它们是两种完全不同且不相关的数据类型。不过,您可以使用一元T**
运算符取消引用T*
以获得*
。
有关指针的介绍,请参阅this tutorial。
P.S。您的程序还会显示未定义的行为,因为标识符Height__Maskm_
是为实现保留的。
答案 1 :(得分:2)
一个问题是:
#define NO-EXTER
这定义了一个值为NO
的宏-EXTER
。编译器需要宏名称和定义之间的空格。
写一下:
#define NO -EXTER
或:
#define NO_EXTER
另一个问题是您对main()
的定义:
snow main(snow args, byteUendedLin**LOC[])
转换typedef时,相当于:
int main(int argc, char **argv[])
但标准要求:
int main(int argc, char **argv)
或
int main(int argc, char *argv[])
或使用你的typedef和变量名:
snow main(snow args, byteUendedLin **LOC)