Hilfe bei diversen GCC Fehler-Meldungen

@Nightwalker3r:
Da hat ja schon devdevil drauf hingewiesen, und es ist schon berichtigt, aber der post war nicht ganz aktuell.
@devdevil:
Ok,logik fehler kommen vor, nenn mal einen.
Syntax Fehler kommen nun mal auch vor,
und wie kommst du darauf dass ich keinen Plan hab?
Ich weiß ziemlich genau wass ich da mache, nur ist halt die syntax tlw. etwas daneben.
(und wieso sagst du dass erst jetzt?)

das mit dem kommentieren kann ich erst morgen machen.


Was ist eigentlich mit der fehler meldung in zeile 7 ff? ich schnall nicht ganz was dem da nicht passt?

greetz
 
Zuletzt bearbeitet:
Jo, da is z.B. falsch, dass du keinen Array (o. Zeiger) übergibst, aber darauf zugreifst als wäre es einer. (und das geht nicht, solange der typ nicht operator[] überladen hat ;)).


 
das mit dem array als Übergabe hab ich schon in dem Thread "klammer und arrayproblem"
angesprochen, allerdings war es keinem(auch dir nicht) möglich mir das so zu erklären dass die Fehlermeldung verschwand.
 
Das Problem ist halt die Übergabe:
int cout(char coutnrz, char coutnrs, char coutouttext);
Das löst du ganz einfach, in dem du nicht die Speicherzelle Übergibst sondern nur die Addresse:
int cout(char coutnrz, char coutnrs, char* coutouttext);
jetzt ist das beutzen von dem [] aus kein Problem mehr.
 
Sag einfach was du da gemacht haben willst. Es sind zu viele Syntaxfehler, und vor allem hast du sehr viele Endlosschleifen usw. drin.

Deine ganzen if-s kann man kürzen usw. ... also sag was, ich schreibs dir dann schnell.
 
Sag einfach was du da gemacht haben willst. Es sind zu viele Syntaxfehler, und vor allem hast du sehr viele Endlosschleifen usw. drin.

Deine ganzen if-s kann man kürzen usw. ... also sag was, ich schreibs dir dann schnell.

Das ist aber nicht unbedingt sinn der Sache, es geht doch darum das er sich mit seinen Problemen selber auseinandersetzt. Von uns soll er bei schwierigen Dingen einen Anstoß bekommen. Irgendwann soll er ja soweit sein und seine Problem ganz alleine Lösen können.
 
@ nightwalker3r
ne, dass nicht, aber die erklärungen.. :p aber dank sgss hab ichs jetz..

ich hab zwar gesagt ich könne bis heute den code kommentieren, hab aber leider sehr viel stress :-(, sry

skini
 
So, der code und die Fhelerrmeldungen im ersten post kommentiert und/oder aktualisiert.
Ich habe es mit den parametern " -ffreestanding -c -Os -o kernelc ..\kernelc.c" kompiliert.
Bin über hilfe dankbar,
greetz skini
 
Arrays lassen sich nicht so einfach behandeln, wie du es tust ;)

main.c
C++:
#include "osheader.h"

int main()
{
    // show welcome message
    puts(0, 0, "Welcome to epOS, the experimental programmed Operating System");

    // wait for [Enter]
    waitfor(0x10); //Weiter bei enter

    // show information message
    puts(0, 1, "Input only this signs: abcdefghijklmnopqrstuvwxyz0123456789");
    
    // wait for [Enter]
    waitfor(0x10);
  
    char command[128];

    while(1)
    {
        clear();

        // ask for command
        puts(0, 0, "Input Command:");
        
        // read input
        gets(14, 0, command, 128);
    
        system(command);
    }

    return 0;
}

Dann mal schnell nen neuen Header dazu:
string.h
C++:
#if !defined(STRING_H__INCLUDED)
#define STRING_H__INCLUDED

    typedef unsigned int size_t;
    #ifndef NULL
        #define NULL 0
    #endif 
    
    inline size_t strlen(const char* const string)    
    {
        if (string == 0) return 0;
        
        size_t res = 0;
        while (string[res])    ++res;
        return res;
    }

    inline void strcpy(char* dest, const char* src)
    {
        std::size_t i = 0;
        for (; *src; ++i)
            dest[i] = *src++;
        dest[i] = 0;
    }

    inline void strncpy(char* dest, const char* src, const size_t count)
    {
        bool end = false;
        for (std::size_t i = 0; i < count && src[i]; ++i)
        {
            if (end == false && ) end = true;
            dest[i] = (end ? 0 : src[i]);
        }
    }

    char* strchr(const char *str, int ch)
    {
        do {
            if (*str == ch) return str;
        } while (*str++);
        return NULL;
    }

    inline void* memset(void* dest, const char value, const size_t count)
    {
        char* tmp = (char*)(dest);
        for (size_t pos = count; pos; --pos) 
            *tmp++ = value;
        return dest;
    }

    inline unsigned short* memsetw(unsigned short* dest, const unsigned short value, const size_t count)
    {
        unsigned short* tmp = dest;
        for (size_t pos = count; pos; --pos) *tmp++ = value;
        return dest;
    }

    inline void* memcpy(void* dest, const void* src, const size_t count)
    {
        const char* source = (const char*)(src);
        char* destination = static_cast<char*>(dest);
        for (size_t pos = count; pos; --pos) 
            *destination++ = *source++;
        return dest;
    }

    inline int memcmp(const void* buf1, const void *buf2, size_t count)
    {
        const unsigned char* buf1_byte = (const unsigned char*)(buf1);
        const unsigned char* buf2_byte = (const unsigned char*)(buf2);
        while (count-- > 0)
        {
            if (*buf1_byte++ != *buf2_byte++)
                return buf1_byte[-1] < buf1_byte[-1] ? -1 : 1;
        }
        return 0;
    }

#endif // STRING_H__INCLUDED
damit wir anständig mit strings umgehen können ;)

So, jetzt das einzige dein Header osheader.h ... der is nen bissel unschön. Und die Namen der Funktionne hab ich mal geändert, weil ein OS mit C++ unterstützung is noch etwas schwerer als eins in C ;)
 
Zurück