Mam strukturę następująco:nietrywialne wyznaczone inicjalizatory nieobsługiwane
struct app_data
{
int port;
int ib_port;
unsigned size;
int tx_depth;
int sockfd;
char *servername;
struct ib_connection local_connection;
struct ib_connection *remote_connection;
struct ibv_device *ib_dev;
};
Kiedy próbuję go zainicjować w następujący sposób:
struct app_data data =
{
.port = 18515,
.ib_port = 1,
.size = 65536,
.tx_depth = 100,
.sockfd = -1,
.servername = NULL,
.remote_connection = NULL,
.ib_dev = NULL
};
otrzymuję ten błąd:
sorry, unimplemented: non-trivial designated initializers not supported
Myślę, że chce kolejność inicjalizacji dokładnie tak, jak jest zadeklarowana i brakuje local_connection
. Nie muszę go jednak inicjować, a ustawienie NULL nie działa.
Jeśli zmienię go do tego na g ++, wciąż ten sam błąd:
struct app_data data =
{
port : 18515,
ib_port : 1,
size : 65536,
tx_depth : 100,
sockfd : -1,
servername : NULL,
remote_connection : NULL,
ib_dev : NULL
};
Myślę, że używasz g ++ do kompilacji tego kodu. Jeśli tak, usuń "." Oznacza to, że .port staje się portem, .ib_port staje się ib_port. Powinien się później skompilować. – Anon
Używam g ++ 4.9.2 (z włączonym C++ 11), ale usunięcie. nie działa? "port nie został zadeklarowany w tym zakresie" – Ivan
Oh. Nie pamiętam, użyj ":" zamiast "=" np. port: 18515 i zrób to także dla innych zmiennych. – Anon