test
экземпляр в методах msg1()
и msg2()
являются локальными только для этих методов и go выходят за рамки этих методов.
Итак, вы захотите сделать это :
buffer.push_back( message );
Кроме того, std :: vector является контейнером, начинающимся с нуля, поэтому первым элементом будет at(0)
и т. Д.
Другой дело в том, что у тебя утечка памяти. Вы выделяете память, используя оператор new
, но не delete
после использования. Таким образом, вы должны позаботиться об этом тоже. Еще лучше, используйте умный указатель, например std :: unique_ptr с std :: make_unique для автоматизации c управления памятью.
Вот полный рабочий пример ( live ):
#include <iostream>
#include <vector>
class Test
{
public:
std::vector<std::string> buffer;
void msg1();
void msg2();
};
void Test::msg1()
{
std::string message = "HELLO";
buffer.push_back(message);
}
void Test::msg2()
{
std::string message = "WORLD";
buffer.push_back(message);
}
int main()
{
Test *test = new Test; // memory allocation
test->msg1();
test->msg2();
std::cout << test->buffer.size() << std::endl;
std::cout << test->buffer.at(0) << std::endl;
std::cout << test->buffer.at(1) << std::endl;
delete test; // memory deallocation
return 0;
}
Вывод:
2
HELLO
WORLD
Соответствующая тема, которую вы можете прочитать: C ++: "std :: endl" vs " \ п "