Ошибки компиляции со связанными файлами в C ++ - PullRequest
2 голосов
/ 22 марта 2012

Edit: я уменьшил большинство ошибок с префиксом std:: в строковых объявлениях.Однако, похоже, что есть проблема с несколькими функциями, в частности с определениями тех функций, у которых в качестве параметра есть строка.

Редактировать # 2: Обновлен мой код (У меня DID есть префикс std:: намои объявления функций, но не отраженные в моем посте).Пожалуйста, смотрите в самом низу ошибки, отображаемые при добавлении префикса std:: к строковым параметрам в проблемных функциях.


У меня есть файл заголовка movie.h со следующим кодом (соответствующий код):

#include <string>

class Movie
{
    public:

        void addMovieName(std::string movie);
        void addLastName(std::string nameLast);
        void addFirstName(std::string nameFirst);

    private:

        string movieName,
               directorLastName,
               directorFirstName,
               directorFullName;
};

И файл реализации movie.cpp, подобный этому (соответствующий код):

#include "movie.h"

// addFirstName, addLastName, and addMovie name all do the same things
// so I'm only including one since they all generate the same error

void Movie::addFirstName(string nameFirst)
{
   directorFirstName = nameFirst.resize(10, ' ');
}

При компиляции я получаю следующие ошибки:

g++ -c movie.cpp -o movie.o
movie.cpp:225: error: variable or field ‘addFirstName’ declared void
movie.cpp:225: error: ‘int Movie::addFirstName’ is not a static member of ‘class Movie’
movie.cpp:225: error: ‘string’ was not declared in this scope
movie.cpp:226: error: expected ‘,’ or ‘;’ before ‘{’ token
movie.cpp:240: error: variable or field ‘addLastName’ declared void
movie.cpp:240: error: ‘int Movie::addLastName’ is not a static member of ‘class Movie’
movie.cpp:240: error: ‘string’ was not declared in this scope
movie.cpp:241: error: expected ‘,’ or ‘;’ before ‘{’ token
movie.cpp:255: error: variable or field ‘addMovieName’ declared void
movie.cpp:255: error: ‘int Movie::addMovieName’ is not a static member of ‘class Movie’
movie.cpp:255: error: ‘string’ was not declared in this scope
movie.cpp:256: error: expected ‘,’ or ‘;’ before ‘{’ token
make: *** [movie.o] Error 1

Некоторые из тех, кто сказал, что мне нужно добавить std:: к строковым параметрам в определениях функций.

После этого:

// adding std:: prefix
void Movie::addFirstName(std::string nameFirst)
{
   directorFirstName = nameFirst.resize(10, ' ');
}

Я получаю следующееошибки.Обратите внимание, что я изменил его только для одной функции.Первые ошибки я не понимаю, а остальные остаются такими же, как и раньше.

g++ -c movie.cpp -o movie.o
movie.cpp: In member function ‘void Movie::addFirstName(std::string)’:
movie.cpp:227: error: no match for ‘operator=’ in ‘((Movie*)this)->Movie::directorFirstName = nameFirst.std::basic_string<_CharT, _Traits, _Alloc>::resize [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](10u, 32)’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.h:485: note: candidates are: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.h:493: note:                 std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const _CharT*) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.h:504: note:                 std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(_CharT) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
movie.cpp: At global scope:
movie.cpp:240: error: variable or field ‘addLastName’ declared void
movie.cpp:240: error: ‘int Movie::addLastName’ is not a static member of ‘class Movie’
movie.cpp:240: error: ‘string’ was not declared in this scope
movie.cpp:241: error: expected ‘,’ or ‘;’ before ‘{’ token
movie.cpp:255: error: variable or field ‘addMovieName’ declared void
movie.cpp:255: error: ‘int Movie::addMovieName’ is not a static member of ‘class Movie’
movie.cpp:255: error: ‘string’ was not declared in this scope
movie.cpp:256: error: expected ‘,’ or ‘;’ before ‘{’ token
make: *** [movie.o] Error 1

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

Вы не указали правильное пространство имен для строки, строка является членом пространства имен std. В этом случае вам нужно написать std :: string, поскольку я не вижу "using namespace std;" в вашем коде.

заменить:

string movieName,
       directorLastName,
       directorFirstName,
       directorFullName;

с:

std::string movieName,
            directorLastName,
            directorFirstName,
            directorFullName;
0 голосов
/ 23 марта 2012

Никто еще не ответил на вопрос, поэтому я решил, что просто положу его сюда, так как я понял это.По сути, мое решение было:

Использовать using std::string в файлах заголовка и реализации.


Во-вторых, объявление:

stringOne = stringTwo.resize(some_number, ' ');

... терпит неудачу, потому что resize() является возвращаемой функцией void.Заменить это двумя отдельными утверждениями;а именно:

stringOne = stringTwo;
stringOne.resize(/* blah */);

... решает остальные ошибки.Благодарим @Jesse за упоминание об этом в комментариях.

0 голосов
/ 22 марта 2012

Почему все ваши частные поля указатели?Хранение простых int s и float s как полей - это нормально.Более того, вам не нужно «инициализировать» строки в вашем конструкторе.Если вы этого не сделаете, их конструкторы по умолчанию будут вызываться автоматически (string s будет пустым).А почему ты прокладываешь струны?Даже если вам это нужно при отображении, добавьте их туда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...