1

コードで次のエラーが発生します。「socketfd」がclient.hppで宣言され、client.cpp内のコンストラクターで使用されているため、理由がわかりませんが、後で使用しようとすると、エラー。

ターミナル出力:

g++ client.cpp -o client.o -pthread -c -std=c++11
client.cpp: In function ‘void sendMessage(std::string)’:
client.cpp:37:23: error: ‘socketfd’ was not declared in this scope

client.hpp

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netdb.h>

class Client {

    public:
        Client();
        ~Client();
        void sendMessage(std::string);

    private:
        int status, socketfd;
        struct addrinfo host_info;
        struct addrinfo *host_info_list;

};

client.cpp

#include "client.hpp"


Client::Client() {
    memset(&host_info, 0, sizeof host_info);
    std::cout << "Setting up the structs..." << std::endl;
    host_info.ai_family = AF_UNSPEC;
    host_info.ai_socktype = SOCK_STREAM;
    status = getaddrinfo("192.168.1.3", "8888", &host_info, &host_info_list);
    if (status != 0) {
        std::cout << "getaddrinfo error " << gai_strerror(status);
    }

    std:: cout << "Creating a socket..." << std::endl;
    socketfd = socket(host_info_list->ai_family, host_info_list->ai_socktype, host_info_list->ai_protocol);
    if (socketfd == -1) {
        std::cout << "Socket Errror ";
    }
    std::cout << "Connecting..." << std::endl;
    status = connect(socketfd, host_info_list->ai_addr, host_info_list->ai_addrlen);
    if (status == -1) {
        std::cout << "Connect Error" << std::endl;
    }
    std::cout << "Successfully Connected" << std::endl;
}

Client::~Client() {

}

void sendMessage(std::string msg) {
    std::cout << "Sending Message: " << msg << std::endl;
    int len;
    ssize_t bytes_sent;
    len = strlen(msg.c_str());
    bytes_sent = send(socketfd, msg.c_str(), len, 0);
}

これは私が行った最初のC++の一部であり、なぜこのエラーが発生するのか少し混乱しています。

4

2 に答える 2

5

あなたはClient::前に行方不明ですsendMessage()

void Client::sendMessage(std::string msg) {
     ^^^^^^^^
于 2013-03-16T21:59:13.533 に答える
4

の関数シグネチャはsendMessage、メンバー関数のシグネチャではありません。これを試して-:

  void Client::sendMessage(std::string msg) {
于 2013-03-16T21:59:24.830 に答える