获取"does not name a type error",但我正在命名一个类型

Getting "does not name a type error", but I am naming a type

我确定我在这里忽略了一些基本的东西,但我想不通。我有这段代码:

boost::asio::io_service smpp_io_service;
tcp::endpoint endpoint(ip::address_v4::from_string("192.168.0.25"), 2775);
std::shared_ptr<tcp::socket> smpp_socket(new tcp::socket(smpp_io_service));
smpp_socket->connect(endpoint);
SmppClient client(smpp_socket);


void wx_test2Frame::OnButton1Click(wxCommandEvent& event)
{
    Logger::out( "Connecting..." );

    try {

        client.setVerbose(true);
        client.bindTransceiver(txtSystemId->GetValue().ToStdString(), txtPassword->GetValue().ToStdString());
        Logger::out( "Connected" );

那些前 5 行在 OnButton1Click 函数内部时工作正常,但是一旦我将它们移到外部(因为我不希望连接在函数结束时关闭),我得到

error: smpp_socket does not name a type

指向 smpp_socket->connect(endpoint); 行。

但是正上方的行将类型命名为 std::shared_ptr<tcp::socket>,不是吗?

我做错了什么?

命名空间范围只能包含声明,smpp_socket->connect(endpoint); 不是声明 - 它是语句。

C++ 标准部分 [basic.link]/1 读取:

A program consists of one or more translation units (Clause 2) linked together. A translation unit consists of a sequence of declarations.

有错误的行在全局范围内,它不是声明或 class/method/function 定义 - 它是函数调用吗?您必须在函数内执行此操作。