我有一行源码:
time_t l1_QuoteTime;
我收到以下错误:
[BCC32 Error] QuoteDefs.h(18): E2303 Type name expected
Full parser context
Unit1.cpp(7): #include api\dasapi.h
dasapi.h(13): #include api\QuoteDefs.h
QuoteDefs.h(9): class st_L1Quotes
我已经包括了<time.h>
.我在这里缺少什么?
代码:
class st_L1Quotes
{
public:
char secsym[10];
char PrimExch;
int mstatus;
double l1_BidPrice;
int l1_BidSize;
double l1_AskPrice;
int l1_AskSize;
time_t l1_QuoteTime;
double l1_lastPrice;
double l1_todayhigh;
double l1_todaylow;
double l1_todayclose;
int l1_volume;
double l1_yclose;
double l1_todayopen;
double l1_LastBidPrice;
// this is used for show up/down arrow for NASDAQ NMS stocks;
};
最佳答案
<time.h>
在哪里(应该是 <ctime>
)包括 w.r.t "api/dasapi.h"
标题?
的确,QuoteDefs.h
header 应该是 #include
<time.h>
或 <ctime>
本身,因为除非存在包含,否则不能使用它。我可以看到 time_t
在我格式化的代码片段的第 11 行可能在您的代码格式中的第 9 行,但是没有标题保护 guard 或必要的 #include
的空间。 .
一般提示:
- 标题应该是独立的和幂等的。
自包含意味着您应该能够编写:
#include "header.h"
在文件的顶部,代码应该可以干净地编译。
幂等性意味着标题是否被包含两次无关紧要。通常,这不会直接完成;相反,源将直接包含 header ,而其他一些 header 也将间接包含 header (或者其他两个 header 将间接包含它)。想一想如果您只能包含 <stdio.h>
会多么麻烦或 <iostream>
一次!
您可以通过编写来测试幂等性:
#include "header.h"
#include "header.h"
在文件的顶部,代码应该可以干净地编译。
我什至有一个名为 chkhdr
的脚本自动化测试:
#!/bin/ksh
#
# @(#)$Id: chkhdr.sh,v 1.3 2011/07/25 07:09:49 jleffler Exp $
#
# Check whether a header can be compiled standalone
tmp=chkhdr-$$
trap 'rm -f $tmp.?; exit 1' 0 1 2 3 13 15
cat >$tmp.c <<EOF
#include HEADER /* Check self-containment */
#include HEADER /* Check idempotency */
int main(void){return 0;}
EOF
options=
for file in "$@"
do
case "$file" in
(-*) options="$options $file";;
(*) echo "$file:"
${CC:-gcc} $options -DHEADER="\"$file\"" -c $tmp.c
;;
esac
done
rm -f $tmp.?
trap 0
关于time_t 的 C++ 生成器错误 "Type name expected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12991658/