Вы должны использовать Context.startInstrumentation , а не adb. Например, из вашей операции запустите
startInstrumentation (новое имя компонента («com.example.aatg.tc.test», «android.test.InstrumentationTestRunner»), null, null);
В заголовке довольно типично включить другие заголовки. Заголовки, закрытые заголовком x, будут заблокированы в любом файле, который содержит x. Это должно быть тривиально понять, как только вы поймете, что , включая файл в другом случае. В этом случае один из стандартных заголовков оказался включенным в другой.
Файлы, включенные заголовками, могут меняться между версиями. Если вы не включаете требуемый заголовок, ваша программа может разбиться на другую (версию) стандартную библиотеку, даже если она может работать в текущей реализации. Конечно, это относится и к другим библиотекам.
В стандарте C ++ сказано следующее в разделе 17.6.5.2 [res.on.headers]:
Заголовок C ++ может содержать другие заголовки C ++.
blockquote>Для вашего вопроса это означает, что компилятор может просто действовать так, как если бы вы включили другие заголовки C ++. В вашем примере компилятору разрешено включать заголовок
<numeric>
, если вы включили<algorithm>
или наоборот.Но это еще не все. В стандарте также говорится:
Заголовок C ++, показанный в его кратком обзоре, как включающий другие заголовки C ++, должен содержать описания и определения, которые появляются в синонимах этих других заголовков.
blockquote >И:
Стандартные заголовки C [...] должны включать только соответствующий стандартный заголовок C ++ [...]
blockquote>(Обратите внимание, что я цитирую последний бесплатный проект C ++ 11. Окончательная версия стандарта ISO не является бесплатной. См. https://isocpp.org/std/the-standard .)
Заголовок
<utility>
является примером заголовка C ++, который, как гарантируется, будет содержать другой. Его синопсис explitly включает<initializer_list>
. Это означает, что соответствующий компилятор должен принять следующее:#include <utility> // #include <initializer_list> // not needed int main() { std::initializer_list<int> x = {}; }
Для заголовков C, напротив, это означает, что следующее не должно компилироваться:
#include <stdio.h> int main() { std::cout << "\n"; // must not compile }
Что означает стандарт говорит, что это подтверждается документацией вашей реализации. Например, в документации для Visual C ++ 2013 говорится:
Заголовок библиотеки C ++ включает любые другие заголовки библиотек C ++, необходимые для определения необходимых типов. (Всегда указывайте явно любые заголовки библиотек C ++, необходимые в блоке трансляции, однако, чтобы вы не ошиблись в отношении его фактических зависимостей.) Стандартный заголовок C никогда не включает другой стандартный заголовок.
blockquote>вот хороший; не зависят от автоматического включения. Явно укажите все, что вам нужно.
<vector>
. – user2079303 26 February 2015 в 16:20