zmienna int const a tablica w klasie

0

Mam taki sobie kod. Ale nie kompiluję się.

class a
{
  private:
  const int i;
  int array[i];
  public:
  a():i(5){}
    
};

int main()
{
    a obiekt;
    return 0;
}

Zna ktoś sposób żebym mógł osiągnąć to co chce bez używania static? Czy muszę zrobić

static const int i;
1

Musisz tablicę alokować dynamicznie, inaczej chyba nie da rady.

1

A powiedz mi magiku, jaka liczba wg ciebie powinna się pojawić na ekranie?

class a
{
  private:
  const int i;
  int array[i];
  public:
  a():i(5){}
  a(bool c):i(50){}
  a(const a &r):i(50000){} 
};
 
int main()
  {
   cout<<sizeof(a)<<endl;
   return 0;
  }
0

const int i; nie może być tylko zadeklarowane, musisz przypisać wartość do stałej.

Za drugim razem przeczytam cały kod.
Za drugim razem przeczytam cały kod.
Za drugim razem przeczytam cały kod.
(...)

:D

0

Na upartego coś się wymyśli ;)

#include <iostream>
 
struct a {
    int i;
    int *array;
};
 
template <unsigned N>
struct b : public a {
    int arr[N];
    
    b() {
        i = N;
        array = arr;
    }
};
 
int main() {
    b<50> bb;
    a *aa = &bb;
    
    return 0;
}

Nie ma żadnej dynamicznej alokacji :)

0

Tak przy okazji, w nowym standardzie C++ planowane jest w końcu wprowadzenie VLA. No, prawie.

int i = 5;
int tab[i];

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html

A dlaczego "prawie"?
w C11 dozwolone jest coś takiego:

    int n = 5;
    char tab[n];
    char arr[sizeof(tab)];

w C++14 nie przewidują takiego magicznego sizeofa. z drugiej strony, g++ ten kod i tak już teraz przepuszcza :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1