Avatar billede morw Nybegynder
30. marts 2003 - 19:18 Der er 5 kommentarer og
2 løsninger

funktion med pointer osv

Hej

Hvad skal jeg gøre for at få dette til at virke?

#include <iostream>
#include <string>

int main()
{

        std::string hent(std::string *s)
        {
                std::string temp;

                // find første \n
                int f = *s.find_first_of("\n");

                // temp
                temp = *s.substr(0, f);

                // resten
                *s = *s.substr(f+1, *s.size() - f -1);

                //return
                return temp;
        }

        // strings
        std::string ind;

        // tekst
        ind = "hejsa\nmereher\njaja\n";

        // udskriv
        std::cout << "ind er: '" << ind << "'\n";
        std::cout << hent(&ind) << "\n";
        std::cout << "ind er nu: '" << ind << "'" <<std::endl;

        return 0;
}
"string.cc" 36 lines, 567 characters
> g++ string.cc -o ok
string.cc: In function `int main()':
string.cc:8: syntax error before `{'
string.cc:12: `s' undeclared (first use this function)
string.cc:12: (Each undeclared identifier is reported only once
string.cc:12: for each function it appears in.)
string.cc:15: `temp' undeclared (first use this function)
string.cc: At top level:
string.cc:28: ANSI C++ forbids declaration `ind' with no type
string.cc:28: conflicting types for `int ind'
string.cc:25: previous declaration as `class string ind'
string.cc:28: initialization to `int' from `const char *' lacks a cast
string.cc:28: confused by earlier errors, bailing out
>
Avatar billede soreno Praktikant
30. marts 2003 - 19:23 #1
Du kan ikke have metoder i metoder, gør sådan:
#include <iostream>
#include <string>

        std::string hent(std::string *s)
        {
                std::string temp;

                // find første \n
                int f = *s.find_first_of("\n");

                // temp
                temp = *s.substr(0, f);

                // resten
                *s = *s.substr(f+1, *s.size() - f -1);

                //return
                return temp;
        }


int main()
{

      // strings
        std::string ind;

        // tekst
        ind = "hejsa\nmereher\njaja\n";

        // udskriv
        std::cout << "ind er: '" << ind << "'\n";
        std::cout << hent(&ind) << "\n";
        std::cout << "ind er nu: '" << ind << "'" <<std::endl;

        return 0;
}
Avatar billede soreno Praktikant
30. marts 2003 - 19:24 #2
Hvis du er træt af at skrive std:: så kan du gøre sådan (eksempel):
#include <iostream>

using namespace std; // <------ tilføj denne sætning..

void main()
{
  cout << "hello" << endl;
}
Avatar billede morw Nybegynder
30. marts 2003 - 19:26 #3
Så er jeg nede på:

string.cc: In function `class string hent(string *)':
string.cc:9: request for member `find_first_of' in `s', which is of non-aggregate type `string *'
string.cc:12: request for member `substr' in `s', which is of non-aggregate type `string *'
string.cc:15: request for member `size' in `s', which is of non-aggregate type `string *'
Avatar billede soreno Praktikant
30. marts 2003 - 19:26 #4
Din hent er forkert, f.eks. kan du compile den sådan:
std::string hent(std::string *s)
{
        std::string temp;

        // find første \n
        int f = s->find_first_of("\n");

        // temp
        temp = s->substr(0, f);

        // resten
        *s = s->substr(f+1, s->size() - f -1);

        //return
        return temp;
}
Avatar billede arne_v Ekspert
30. marts 2003 - 19:27 #5
Følgende compiler:

#include <iostream>
#include <string>

        std::string hent(std::string *s)
        {
                std::string temp;

                // find første \n
                int f = (*s).find_first_of("\n");

                // temp
                temp = (*s).substr(0, f);

                // resten
                *s = (*s).substr(f+1, (*s).size() - f -1);

                //return
                return temp;
        }


int main()
{


        // strings
        std::string ind;

        // tekst
        ind = "hejsa\nmereher\njaja\n";

        // udskriv
        std::cout << "ind er: '" << ind << "'\n";
        std::cout << hent(&ind) << "\n";
        std::cout << "ind er nu: '" << ind << "'" <<std::endl;

        return 0;
}
Avatar billede morw Nybegynder
30. marts 2003 - 19:31 #6
(*s). vs ->

Er der en af dem der er at foretrække?
Avatar billede arne_v Ekspert
30. marts 2003 - 19:36 #7
Ja.

-> er mest C/C++'sk.

min (*s) var en tanke-torsk.

[den laver dog præcis det samme]
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester