Однажды я решил эту проблему, перемещая все inlines после определения класса и помещая #include
для других классов непосредственно перед inlines в файле заголовка , Таким образом, убедитесь, что все определения + встроенные строки заданы до того, как строки синтаксического анализа проанализированы.
Выполнение этого действия позволяет по-прежнему иметь связку строк в обоих (или нескольких) файлах заголовков. .
Как это
// File: A.h
#ifndef __A_H__
#define __A_H__
class B;
class A
{
int _val;
B *_b;
public:
A(int val);
void SetB(B *b);
void Print();
};
// Including class B for inline usage here
#include "B.h"
inline A::A(int val) : _val(val)
{
}
inline void A::SetB(B *b)
{
_b = b;
_b->Print();
}
inline void A::Print()
{
cout<<"Type:A val="<<_val<<endl;
}
#endif /* __A_H__ */
... и делает то же самое в B.h
CREATE TABLE Days (day DATE PRIMARY KEY);
Days
со всеми днями, которые вы ищете. mysql> INSERT INTO Days VALUES ('2011-01-01');
mysql> SET @offset := 1;
mysql> INSERT INTO Days SELECT day + INTERVAL @offset DAY FROM Days; SET @offset := @offset * 2;
Затем стрелка вверх и повторите INSERT столько раз, сколько необходимо. Он удваивает количество строк каждый раз, поэтому вы можете получить строки из четырех месяцев в семи INSERT. SELECT d.day FROM Days d
LEFT OUTER JOIN Reports r ON d.day = DATE(r.reportdatetime)
WHERE d.day BETWEEN '2011-01-01' AND '2011-04-30'
AND r.reportdatetime IS NULL;`
Если вы имеете в виду, что reportdatetime имеет запись «2 февраля 2011», но другие поля, связанные с этой датой, отсутствуют, например, ниже таблицы snap
reportdate col1 col2
5/10/2011 abc xyz
2/2/2011
1/1/2011 bnv oda
, тогда этот запрос работает отлично
select reportdate from dtdiff where reportdate not in (select df1.reportdate from dtdiff df1, dtdiff df2 where df1.col1 = df2.col1)
Это можно сделать с помощью более сложного одиночного запроса, но я покажу псевдо-код с временной таблицей:
Получите все даты, для которых у нас есть записи:
CREATE TEMP TABLE AllUsedDates
SELECT DISTINCT reportdatetime
INTO AllUsedDates;
теперь добавьте 1 мая, поэтому мы отслеживаем 04-30
INSERT INTO AllUsedData ('2011-05-01')
Если на следующий день нет «следующего дня», мы обнаружили пробел:
SELECT A.NEXT_DAY
FROM
(SELECT reportdatetime AS TODAY, DATEADD(reportdatetime, 1) AS NEXT_DAY FROM AllUsed Dates) AS A
WHERE
(A.NEXT_DATE NOT IN (SELECT reportdatetime FROM AllUsedDates)
AND
A.TODAY <> '2011-05-01') --exclude the last day