Jump to content



String out of this scope


Seek & Find

Recommended Posts

Καλημερα σας, εχω τον παρακατω απλο κωδικα: και παιρνω compile error "String out of this scope" στο σημειο με τα bold. Αν μπορει καποιος ας βοηθησει γιατι δεν καταλαβαινω τι φταιει..

file.h
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>

using namespace std;

int change_v([U][B]string[/B][/U] v);

file.cpp
#include "file.h"

int change_v(string v)
{
v.append("hello");
v.append("world");
cout << v << endl;
}

main.cpp
int main()
{
change_v("Hi! ");
return 0;
}

ευχαριστω

Link to comment
Share on other sites

Θα έπρεπε να κάνει κανονικά compile, αρκεί βέβαια να έχεις κάνει include και το file.h στο main.cpp... Τι compiler χρησιμοποιήσεις...? Μήπως δεν είναι αυτός όλος ο κώδικας...?

Επίσης 1-2 παρατηρήσεις...


//file.h
#ifndef FILE_H_
#define FILE_H_

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>

int change_v(std::string v);

#endif /* FILE_H_ */

Πάντα στα headers βάζεις το #ifndef/define/endif, γιατί αν τα κάνεις include από δυο αρχεία θα έχεις πρόβλημα... Επίσης ποτέ στα header files δεν δηλώνεις use από namespaces, αλλά δηλώνεις τις μεταβλητές σου μαζί με το namespace τους, πχ std::string... το namespace το δηλώνεις μόνο στο cpp αρχείο και αυτό το κάνεις για να μην έχεις conflicts μεταξύ των namespaces όταν κάνεις include πολλά headers σε ένα αρχείο...


//file.cpp
#include "file.h"

using namespace std;

int change_v(string v)
{
v.append("hello");
v.append("world");
cout << v << endl;

return(v.size()); //return length
}

Πάντα κάνεις return ένα value, όταν έχεις δηλώσει οτιδήποτε άλλο εκτός από void την function σου, διαφορετικά θα επιστρέφει ότι βρει στο τέλος του stack του assembly call function, το οποίο είναι πρόβλημα, ειδικά όταν κάπου έχεις χρησιμοποιήσει την τιμή που επιστρέφει η function...

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.