0

我有一行源代码:

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;
};
4

1 回答 1

3

标题在哪里<time.h>(应该<ctime>)包含在哪里?"api/dasapi.h"

实际上,QuoteDefs.h标头可能应该是#include其中之一<time.h><ctime>本身,因为除非存在该包含,否则不能使用它。我可以看到我time_t格式化的代码片段中的第 11 行如何在您的代码格式中的第 9 行,但是没有空间用于标题保护防护或必要的#include.

一般提示:

  • 标头应该是自包含的和幂等的。

自包含意味着您应该能够编写:

#include "header.h"

在文件的顶部,代码应该可以干净地编译。

幂等意味着标题是否包含两次都无关紧要。通常,这不会直接完成。而是源将直接包含标题,而其他一些标题也将间接包含标题(或其他两个标题将间接包含它)。想想如果你只能包含<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
于 2012-10-20T19:43:56.640 回答