2015-12-22 4 views
-3
const int fileLength = fileContent.length(); 
    char test[1000]; 
    for (int p = 0; p < fileLength; ++p){ 
     test[p].append(fileContent[p]); // Error: expression must have class type 
    }; 

Я пытаюсь добавить символы текстового файла в массив, который я создал. Хотя я получаю ошибку «выражение должно иметь тип класса». Пробовал эту ошибку без ошибок.C++ Добавление в массив

+4

Возможный дубликат [The Definitive C++ Book Guide and List] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – BoBTFish

+0

Если вы хотите использовать 'append ', почему вы используете массив символов вместо строки или вектора? – DrDonut

ответ

5

test - это массив символов. test[p] - это символ. char не имеет каких-либо членов. В частности, у него нет члена append.

Вы, вероятно, хотите, чтобы сделать тест std::vector<char>

const auto fileLength = fileContent.length(); 
    std::vector<char> test; 
    for (const auto ch : fileContent) 
    { 
     test.push_back(ch); 
    } 

или даже:

std::vector<char> test(fileContent.begin(), fileContent.end()); 

если вы тогда действительно нужно лечить test как массив (потому что вы взаимодействия с некоторой функцией C например:

char* test_pointer = &*test.begin(); 

Если вы хотите, чтобы использовать его как строку с нулевым завершением, тогда вам, вероятно, следует использовать std :: string вместо этого и получить указатель с test.c_str().

+0

@LogicStuff: Это было адресовано мне или OP? Я говорю «вероятно» в нескольких местах, потому что бывают случаи, когда этот совет не применяется. –

+0

OP Удалил свой комментарий, так и я сейчас. – LogicStuff

0

массив символов не имеет какой-либо функции-члена по имени присоединять .Однако, станд :: строка имеет одну функцию-член с именем Append, как показано ниже:

string& append (const char* s, size_t n); 

Я думаю, что вы по ошибке использовали массив символов вместо std :: string. станд :: строка будет решить эту проблему, как показано ниже:

const int fileLength = fileContent.length(); 
    string test; 
    for (int p = 0; p < fileLength; ++p){ 
     test.append(fileContent[p],1); // Error: expression must have class type 
    }; 

Лучше всего было бы строка теста (fileContent) .Вы можете получить доступ к тест так же, как массив .Refer строки класса для более подробной информации.

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