2016-12-17 2 views
-2

Итак, я написал программу в Visual Studio 2015 и попытался передать ее Ubuntu. И я столкнулся с проблемами.C++ member function error: ожидается a ',' или '...' before '.' token

У меня есть класс с именем «InputData» с конструктором, который принимает две строки, чтобы положить в ifstream:

class InputData { 
(...) 
public: 
    InputData(string filea.c_str(), string fileb.c_str()); 
} 

и в моем конструкторе, у меня есть

InputData::InputData(string filea.c_str(), string fileb.c_str()) 
{ 
    ifstream instream; 
    instream.open(filea.c_str()); 
    (...) 

и, наконец, в мой основная функция У меня есть

InputData x ("firstfile.csv", "secondfile.csv"); 

Однако, когда я пытаюсь связать их вместе и скомпилировать, я получаю Ошибка:

expected a ',' or '...' before '.' token 
    InputData(string filea.c_str(), string fileb.c_str()); 
        ^

Я никогда не видел этот тип ошибки раньше, и я понятия не имею, что случилось с ним. Может ли кто-нибудь помочь?

(также, я использую .cstr(), потому что мой компилятор по какой-то причине не совместим с или не обновляется с ++ 11. Я получаю другую ошибку, если я не использую ПРМ.)

+0

'InputData (строка filea.c_str(), строка fileb.c_str());' Это недопустимый синтаксис. Он также не будет компилироваться в MSVC. 'InputData (std :: string filea, std :: string fileb);' должен работать, если бы вы включили заголовок ''. – Ari0nhh

+0

Я пробовал это, но я получаю сообщение об ошибке «no matching function call to std :: basic_ifstream», даже если я скомпилирую с -std = C++ 11. – user144519

+0

'InputData (строка filea.c_str(), строка fileb.c_str());' означает 'InputData (char *, char *);' so is 'char *' строковый класс? – Raindrop7

ответ

2

Ошибка компилятора заключается в том, что в объявлении конструктора каждый из параметров должен иметь указанный тип и переменную имя для этого типа, как и любая функция C++. Но имена переменных не могут содержать символ '.', поэтому ошибка: filea.c_str() не является допустимым именем переменной. Это вызов функции.

Таким образом, ваш конструктор должен быть чем-то вроде InputData(string filea, string fileb).

Чтобы скомпилировать как C++11, используйте флаг компилятора gcc -std=c++11.

+0

Я пробовал это, но я получаю сообщение об ошибке «no matching function call to std :: basic_ifstream», даже если я скомпилирую с -std = C++ 11. – user144519

+0

Вам нужно будет сообщить мне все сообщение об ошибке, которое должно указать, где в коде возникла проблема. Кстати, я не уверен, что это имеет значение, но это должно было быть -std = C++ 11'. Я отредактировал свой ответ. –

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