Miért warningol a fordító? Amúgy jól működik de mi a veszélyes ebben?
// main.cpp
# include <iostream>
# include <string.h>
typedef unsigned short ushort ;
using std::cout ;
using std::endl ;
using std::string ;
class cProba
{
public:
cProba():
x({14,82,8,4}) {} /*Itt miért kapom ezt a warningot: list-initializer for non-class type must not be parenthesized [enabled by default] */
short x[4] ;
protected:
private:
};
int main(void)
{
cProba obj ;
for(ushort i = 0; i < sizeof(obj.x) / sizeof(*obj.x); ++i)
cout << *(obj.x + i) << endl ;
return int(0) ;
}
Én nem vagyok C++-os, de C#-ban egy listát így inicializálsz:
List<int> x = new List<int>() { 14, 82, 8, 4 };
Vagy így:
List<int> y = new List<int> { 14, 82, 8, 4 };
Tehát gondolom e helyett: x({14,82,8,4})
ez kéne:x(){14,82,8,4}, vagy simán x{14,82,8,4} próbáld ki
Nem jó sajnos.
De fogalmam sincs,hogy tömböt miért nem lehet inicializálni konstruktorban.
Akkor szerintem írd simán:
short x[] = {14,82,8,4};
vagy
short x[4] ;
x = {14,82,8,4};
cProba(): x {10,20,30,40} /*extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default] */
{}
A zárójelet kivettem mert az x nem osztály.Ezért nem kell az oda.De most meg hiányolja a fordító az egyenlőségjelet.
Így meg nem írhatom:
cProba(): x = {10,20,30,40}
{}
Így le sem fordul inicializáló listába nem lehet egyenlőségjelet írni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!