2015-04-17 2 views
-2

Как вы объявляете функцию, которая возвращает строку в заголовочном файле, поэтому ее можно использовать другими * .cpp-файлами.Объявить функцию, которая возвращает строку в файле заголовка

Например, код ниже не компилировать со следующими ошибками:

Source.h

#pragma once 
#include <string> 

string MyFunc(); 

Source.cpp

#include "stdafx.h" 
#include "Source.h" 

using namespace std; 
string MyFunc() 
{ 
    string str; 
    return str; 
} 

Ошибки

Error 1 error C2146: syntax error : missing ';' before identifier 'MyFunc' 4 1 
Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 4 1 
Error 3 error C2872: 'string' : ambiguous symbol 5 1 
Error 4 error C2146: syntax error : missing ';' before identifier 'MyFunc' 5 1 
Error 5 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 5 1 
Error 6 error C2086: 'int string' : redefinition 5 1 
Error 7 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 6 1 
Error 8 error C2872: 'string' : ambiguous symbol 7 1 
Error 9 error C2146: syntax error : missing ';' before identifier 'str' 7 1 
Error 10 error C2065: 'str' : undeclared identifier 7 1 
Error 11 error C2065: 'str' : undeclared identifier 8 1 

If Я заменяю string с char*, он компилируется без ошибок.

+5

вы забыли 'std ::', строка объявлена ​​внутри пространства имен – Borgleader

ответ

2

насчет:

std::string MyFunc(); 

Вам нужно добавить префикс std::, если не использовать пространство имен. Как правило, вы можете также префикс, чтобы избежать конфликта с вашими собственными классами.

Смежные вопросы