C++ Matrix error

2Antworten
  1. #1
    Avatar von yasmin90
    yasmin90 ist offline
    Themen Starter

    Title
    Benutzer
    seit
    26.01.2013
    Ort
    bayern
    Beiträge
    1

    Standard C++ Matrix error

    Salü liebe foristen.
    Kann mir jemand mit meinem Programm von der Arbeit helfen. Ich finde den Fehler einfach nicht. So langsam bin ich echt schon am verzweifeln. Es soll ein beliebig grosses 2 Dimensionales Array erstellt werden und das soll mit zufälligen werten gefüllt sein. Aber der compiler von code::blocks sagt das er irgendwas nicht zuweisen kann.

    C:\Users\yasmin\Documents\Code\pointer\main.cpp||I n function 'int** makeNewMatrix(short unsigned int, short unsigned int)'
    C:\Users\yasmin\Documents\Code\pointer\main.cpp|67 |error: lvalue required as left operand of assignment|
    C:\Users\yasmin\Documents\Code\pointer\main.cpp|69 |error: invalid conversion from 'int' to 'int**' [-fpermissive]|
    ||=== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===|

    Was hat die Meldung zu bedeuten. Ich komm nicht weiter.

    Code:
    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    #define ARG 3
    #define MAXI (2 << 15)
    void coutMatrix(int **, unsigned short, unsigned short);
    void deleteMatrix(int **, unsigned short);
    int **makeNewMatrix(unsigned short, unsigned short);
    int main(int argc, char *argv[])
    {
       int tmp[2];
       short zeilen, spalten;
        if (argc != ARG)
        {
            std::cout << "\nFehler: Zu wenig Argumente\n" << std::endl;
            std::cout << argv[0] << "  <Zeilenanzahl>  <Spaltenanzahl>" << std::endl;
            exit(EXIT_FAILURE);
        }
       spalten = zeilen ^= zeilen;
       tmp[0] = atoi(argv[1])&((short)pow(sizeof(short), 0x10));
       tmp[1] = atoi(argv[2])&((short)pow(sizeof(short), 0x10));
        if (tmp[0] & 0x8000)
          tmp[0] = ~tmp[0]+1;
        if (tmp[1] & 0x8000)
          tmp[1] = ~tmp[1]+1;
         zeilen = tmp[0];
         spalten = tmp[1];
      int **vektor = makeNewMatrix(zeilen, spalten);
      for (int i = 0; i < zeilen; ++i)
        for (int j = 0; j < spalten; ++j)
          vektor[i][j] = i+j;
      coutMatrix(vektor, zeilen, spalten);
      deleteMatrix(vektor, zeilen);
      return EXIT_SUCCESS;
    };
    void coutMatrix(int **v, unsigned short z, unsigned short s)
    {
      for (unsigned short i = 0; i < z; ++i)
      {
          std::cout << "Zeile: " << i << std::endl;
        for (unsigned short j = 0; j < s; ++j)
        {
          std::cout << "\tSpalte: " << j << " : ";
          std::cout << v[i][j] << std::endl;
        }
      }
    };
    int **makeNewMatrix(unsigned short z, unsigned short s)
    {
      int **v = NULL;
      v = (int**)malloc(sizeof(int*) * z);
      for (unsigned short i = 0; i < z; ++i)
        (v+i) = (int*)malloc(sizeof(int) * s);
      return **v;
    };
    void deleteMatrix(int **v, unsigned short z)
    {
      for (unsigned short i = 0; i < z; ++i)
          free(*(v+i));
       free(v);
      v = NULL;
    };

  2. #2
    Avatar von Spyx
    Spyx ist offline

    Title
    Moderator
    seit
    21.08.2006
    Beiträge
    9.155

    Standard

    Hierbei dürfte dir hier niemand helfen können. Wir sind ein Forum für Computeranfänger und keines für Programmierer. Da würde ich dich jetzt an ein Programmierforum weiterleiten. Am besten an eines, welches sich mit C++ beschäftigt.

  3. #3
    Avatar von Holger
    Holger ist offline

    Title
    Chef
    seit
    08.01.2005
    Ort
    Leverkusen
    Beiträge
    1.825

    Standard

    Moin,
    hier die Fehlermeldungen von Visual Studio 2010 und ein Beispiel, wie sich das Ganze kompilieren lässt. Vielleicht findest Du dadurch den Fehler.

    tmp[0] = atoi(argv[1])&((short)pow(sizeof(short), 0x10));
    tmp[1] = atoi(argv[2])&((short)pow(sizeof(short), 0x10));
    1>xx.cpp(33): error C2668: 'pow': Mehrdeutiger Aufruf einer überladenen Funktion
    1> math.h(583): kann 'long double pow(long double,int)' sein
    1> math.h(535): oder "float pow(float,int)"
    1> math.h(497): oder "double pow(double,int)"
    1> bei Anpassung der Argumentliste '(unsigned int, int)'

    Fehler ist hier "sizeof(short)".

    das würde z.B. funktionieren:
    tmp[0] = atoi(argv[1])&((short)pow(7.0, 0x10));
    tmp[1] = atoi(argv[2])&((short)pow(8.0, 0x10));

    teste erst mal ohne pow:
    tmp[0] = atoi(argv[1])
    tmp[1] = atoi(argv[2])


    (v+i) = (int*)malloc(sizeof(int) * s);
    return **v;
    1>xx.cpp(76): error C2440: '=': 'int *' kann nicht in 'int **' konvertiert werden
    1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    1>xx.cpp(78): error C2440: 'return': 'int' kann nicht in 'int **' konvertiert werden
    1> Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

    das würde z.B. funktionieren:
    v[i] = (int*)malloc(sizeof(int) * s);
    return v;

    Mehr kann ich leider nicht für dich tun, da mit den ganzen Pointern nicht so einfach zu verstehen ist, was da berechnet werden soll.

Ähnliche Themen

  1. Enemy Matrix sucht wieder Member für BF2142

    Von HolgAnk im Forum Computerspiele
    Antworten: 0
    Letzter Beitrag: 17.07.2009, 18:49
  2. Matrix Storage Manager

    Von distel.hf im Forum Anwendersoftware
    Antworten: 2
    Letzter Beitrag: 20.11.2008, 16:56
  3. error

    Von sassi86 im Forum sonstige Hardware
    Antworten: 1
    Letzter Beitrag: 01.11.2007, 12:55
  4. Matrix Texteditor

    Von Mietzekotze im Forum Off-Topic
    Antworten: 7
    Letzter Beitrag: 31.10.2006, 12:16
  5. Cheats bei ENTER THE MATRIX funktionieren nicht!

    Von jinx im Forum Computerspiele
    Antworten: 5
    Letzter Beitrag: 10.08.2006, 13:46
Diese Seite benutzt Cookies Durch die weitere Nutzung der Seite stimmen Sie der Verwendung von Cookies zu. Infos zum Datenschutz