глобальная структура и несколько потоков в c - PullRequest
1 голос
/ 17 апреля 2011

может кто-нибудь объяснить мне ошибку компиляции в этом коде:

#include "common.h"

typedef struct nodeData {
    int procid;
    unsigned short localport;
    DWORD LIFETIME;
    DWORD HELLOTIMEOUT;
    DWORD MAXTIME;
} nodeData;

int listenerThread() {
    if(!bindSocket(listenSocket,nodeData.localport)){
        closesocket(listenSocket);
        WSACleanup();
        exit(-1);
}
    // more code goes here  
}

int main(int argc,char* argv[]) {
    nodeData.localport = 5001;
    // more code goes here  

}

Я хочу, чтобы структура nodeData была доступна для каждого слушателя. потоки будут постоянно манипулировать этой структурой nodeData (защитят ее мьютексом).

поэтому я хочу, чтобы эта структура была доступна во всем мире. где я могу его инициализировать? мое предположение в основном.

ошибка компиляции в строке

nodeData.localport = 5001;

есть

ошибка: нестатическая ссылка на элемент должна быть относительно определенного объекта

что мне здесь не хватает?

спасибо!

Ответы [ 2 ]

6 голосов
/ 17 апреля 2011

nodeData - это тип, а не переменная - так как вы typedef это. Попробуйте, например:

typedef struct nodeData_t {
    int procid;
    unsigned short localport;
    DWORD LIFETIME;
    DWORD HELLOTIMEOUT;
    DWORD MAXTIME;
} nodeData;

nodeData MyNodeData;

А затем используйте переменную MyNodeData

1 голос
/ 17 апреля 2011

Не вдаваясь в то, почему вы не должны использовать глобальные для этого, вы нигде не создали глобальную переменную, только определили структуру и напечатали ее.

До main вам нужно будетсделать:

nodeData myNodeData;

И получить к нему доступ как myNodeData

...