ОК, поэтому все приземлились здесь с простым заявлением, в котором говорится, что вы не можете этого сделать. Не доверять никому. На самом деле, вы можете. Но не так, как вы пытались это сделать. Как правило, вы не можете иметь такие выражения, как вызовы функций вне других функций. И первая функция для вызова называется всегда main
. Однако C++ имеет RAII и глобальные объекты. Следовательно, существует только одно исключение из вышеприведенного правила - построение и уничтожение глобальных объектов. Используя RAII и объявив некоторый объект глобальным, вы можете вызвать его конструктор и сделать остальное оттуда. Так, например, вы могли бы решить проблему вам так:
#include <sstream>
#include <iostream> // just for std::cout and std::endl.
std::stringstream h;
struct MyStruct {
MyStruct() {
h.str(""); //clearing the stringstream object
std::cout << "`h` string stream is cleared now!" << std::endl;
}
};
MyStruct mystruct;
int main()
{
std::cout << "I am called AFTER MyStruct's constructor" << std::endl;
}
компилировать и запускать:
$ g++ -Wall -pedantic -std=c++98 ./test.cc && ./test
`h` string stream is cleared now!
I am called AFTER MyStruct's constructor
Надеется, что это помогает. Удачи!
потому что это не так, как работает C++. Поток программы определяется в основном. Все остальное является определяющим материалом, который может использовать основной (функции, глобальные переменные и т. Д.). – Dave
Исключение из ответов - вы можете создать глобальный объект, конструктор которого будет вызываться. В этом случае вы вызываете конструктор как stringstream h (""). Однако строка string начинает пустую, поэтому это не требуется. –
@NeilKirk Ум, немного опустив его, сэр? –