api — ошибка C ++ Builder & quot; ожидаемое имя типа & quot; за время

У меня есть строка исходного кода:

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

0

Решение

Где <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
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]