2016-04-14 9 views
0

固定長最大の長さのcstringが必要です。できるだけ標準のcstring関数を使用できるようにしたいと思います。 しかしこれで、私は関数のパラメータで問題の多くを取得します。私はまだtypedefに精通していませんが、これが間違ったアプローチか多分何かが欠落しているかどうかはわかりません。 C++(mingwの-W64)のエラーで文字配列のtypedefと関数での使用

typedef char Name[5]; 
std::ostream& operator<<(std::ostream& os, Name& car) 
{ 
    os << car; 
    return os; 
} 

void Change(Name str) 
{ 
    str[2] = '0'; 
} 
Name ChangeRtn(Name str) 
{ 
    str[2] = '1'; 
    return str; 
} 
void ChangeCat(Name * strp) 
{ 
    strcat(strp,"3"); 
} 
int main() 
{ 
    Name test = "abcd"; 
    Change(test); 
    std::cout << test << std::endl; 

    Name test2 = ChangeRtn(test); 
    std::cout << test2 << std::endl; 

    Name * test3; 
    //*test3 = "12"; //incompatible types... make a operator= func 
    strcpy (*test3,"12"); //a temp replacement of operater=? 
    ChangeCat(test3); 
    std::cout << test3 << std::endl; 

    return 0; 
} 

戻り...

typedef.cpp:15:24: error: 'ChangeRtn' declared as function returning an array 
Name ChangeRtn(Name str) 
         ^
typedef.cpp: In function 'void ChangeCat(char (*)[5])': 
typedef.cpp:22:17: error: cannot convert 'char (*)[5]' to 'char*' for argument '1' to 'char* strcat(char*, const char*)' 
    strcat(strp,"3"); 
       ^
typedef.cpp: In function 'int main()': 
typedef.cpp:30:29: error: 'ChangeRtn' was not declared in this scope 
    Name test2 = ChangeRtn(test); 
          ^
+0

よ – Barmar

+1

固定サイズの場合、 'std :: array'はC++で使用できます。 'std :: string'も非常に便利です。 – iammilind

答えて

1

まず、あなたはあなたの言語を選択する必要があります。 CまたはC++のいずれか。

次へ...はい、関数から配列を返すことはできません。回避策としてこれを行うことができます:

構造体ArrReturn { char arr [5]; };

このタイプを返すことができます。なぜそれが配列ではないのか私に尋ねないでください。

私はChange`は、それが与えられています配列を変更し `ているので、なぜそれが何かを返す必要がない?C++の観点から答え、ないC.

関連する問題