0 / 0 / 0
Регистрация: 27.07.2014
Сообщений: 35
1

Ошибка при сборке многофайлового проекта: "невозможно преобразовать "int" в "const golf"

26.01.2016, 20:14. Показов 2524. Ответов 35
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сделал многофайловую программу программу, вот она:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//golf.h
#include <iostream>
#ifndef golg_h_
#define golf_h_
const int Len = 40;
struct golf
{
    char fullname[Len];
    int handicap;
};
int setgolf(golf & p);
void showgolf(const golf & q);
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// golfPROT.h
#include "golf.h"
#include <iostream>
int setgolf(golf & p)
{
    for (int i; i++; p.fullname)
    {
        if (p.fullname[i] == '""')
            return 0;
    }
    return 1;
}
void showgolf(const golf & q)
{
    std::cout << "у игрока " << q.fullname << " кандикап = " << q.handicap << std::endl ;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// и сам файл с функцией main
#include "stdafx.h"
#include <iostream>
#include "golf.h"
#include "golfPROT.h"
int _tmain(int argc, _TCHAR* argv[])
{
    golf g;
    int t;
    std::cout << "введите имя игрока" << std::endl;
    for (int i = 0; i++; g.fullname[i])
    {
        std::cin >> g.fullname[i];
        if (i = 39)
        {
            std::cout << "слишком длинное имя" << std::endl;
        }
    }
    std::cout << "введите гандикап " << std::endl;
    std::cin >> g.handicap;
    t = setgolf(g);
    if (t == 0)
        std::cout << "вы не ввели имени" << std::endl;
    showgolf(g);
    std::cin.get();
    return 0;
}
при сборке вывело ошибки и причину
Причина: невозможно преобразовать "int" в "const golf"
1> Исходный или конечный объект имеет неполный тип
Прошу вас помочь и объяснить, что я сделал не так. Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2016, 20:14
Ответы с готовыми решениями:

Ошибка при сборке проекта. Невозможно запустить qmake
Здравствуйте. Я здесь впервые, с Qt тоже только знакомлюсь. Попробовал создать проект в Qt Creator...

Невозможно преобразовать параметр 3 из 'const wchar_t [20]' в 'int'
Здравствуйте! Подскажите пожалуйста, где тут ошибка? #include &lt;windows.h&gt; #include &lt;hge.h&gt;...

Невозможно преобразовать параметр из int в const char
Приветствую, помогите пожалуйста исправить следующую ошибку: printf: невозможно преобразовать...

Ошибка error C2440: инициализация: невозможно преобразовать 'int' в 'int []'
// ConsoleApplication9.cpp: определяет точку входа для консольного приложения. // #include...

Ошибка при компиляции многофайлового проекта
Добрый вечер. Возникает ошибка при компиляции проекта, состоящего из 3-х файлов. В программе...

35
Неэпический
18093 / 10680 / 2060
Регистрация: 27.09.2012
Сообщений: 26,881
Записей в блоге: 1
26.01.2016, 20:21 2
Цитата Сообщение от kirillivankin Посмотреть сообщение
при сборке вывело ошибки и причину
где?


(i = 39) - это присваивание.
(i == 39) - это сравнение
0
0 / 0 / 0
Регистрация: 27.07.2014
Сообщений: 35
26.01.2016, 20:50  [ТС] 3
спасибо за ответ

Добавлено через 3 минуты
но файл всё ровно не компилируется
0
Неэпический
18093 / 10680 / 2060
Регистрация: 27.09.2012
Сообщений: 26,881
Записей в блоге: 1
26.01.2016, 20:59 4
Цитата Сообщение от kirillivankin Посмотреть сообщение
но файл всё ровно не компилируется
Ошибка где?
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
26.01.2016, 21:05 5
Цитата Сообщение от kirillivankin Посмотреть сообщение
'""'
Это что?
Цитата Сообщение от kirillivankin Посмотреть сообщение
for (int i; i++; p.fullname)
Значение i чему равно?
0
19405 / 10024 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
26.01.2016, 21:05 6
А здесь логическая ошибка:
Цитата Сообщение от kirillivankin Посмотреть сообщение
for (int i; i++; p.fullname)
Подозреваю, что имелось в виду нечто такое:
C++
1
for (int i = 0; p.fullname[i]; i++)
Здесь тоже
Цитата Сообщение от kirillivankin Посмотреть сообщение
if (p.fullname[i] == '""')
mulicharacter literal имеет тип int.
Условие не будет работать правильно.
0
0 / 0 / 0
Регистрация: 27.07.2014
Сообщений: 35
26.01.2016, 21:08  [ТС] 7
А как мне написать условие чтобы работало правильно?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
26.01.2016, 21:08 8
golfPROT.h - 6-я и 8-я строки.
main.cpp - 11-я и 14-я строки.
Это просто интересные моменты.
0
43 / 43 / 20
Регистрация: 08.12.2010
Сообщений: 342
26.01.2016, 21:08 9
kirillivankin, Дак скажи где ошибки. Не можешь сформулировать просто закопируй строки ошибок
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
26.01.2016, 21:09 10
Цитата Сообщение от kirillivankin Посмотреть сообщение
А как мне написать условие чтобы работало правильно?
А правильно - это как?
1
0 / 0 / 0
Регистрация: 27.07.2014
Сообщений: 35
26.01.2016, 21:11  [ТС] 11
мне нужно чтобы функция setgolf проверяла есть ли в массиве имя и если в массиве пустая строка возвращала значение 0, а если имя возвращала значение 1
0
43 / 43 / 20
Регистрация: 08.12.2010
Сообщений: 342
26.01.2016, 21:14 12
kirillivankin, С твоим кодом навскидку, если работают эти адские ковычки, он у тебя на первом пробеле скажет, что строка пустая
0
19405 / 10024 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
26.01.2016, 21:19 13
kirillivankin, Имя - это любая непустая строка что-ли? Тогда можно так:
C++
1
2
3
4
int setgolf(const golf & p)
{
    return *p.fullname != 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Ника)) Посмотреть сообщение
адские ковычки
Это multicharacter character literal.
И этот код не будет работать так, как автор ждет.
И вообще нормальный компилятор предупреждает об этом.
1
0 / 0 / 0
Регистрация: 27.07.2014
Сообщений: 35
26.01.2016, 21:34  [ТС] 14
чуть чуть переделал код всё тоже самое
вот ошибки:
Кликните здесь для просмотра всего текста
1>------ Сборка начата: проект: ConsoleApplication7, Конфигурация: Release Win32 ------
1> ConsoleApplication7.cpp
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.h(4): error C2370: Len: переопределение; другой класс хранения
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.h(4): см. объявление "Len"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.h(6): error C2011: golf: переопределение типа "struct"
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.h(6): см. объявление "golf"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPROT.h(5): error C2027: использование неопределенного типа "golf"
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.h(6): см. объявление "golf"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPROT.h(5): error C2228: выражение слева от ".fullname" должно представлять класс, структуру или объединение
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPROT.h(9): error C2027: использование неопределенного типа "golf"
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.h(6): см. объявление "golf"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPROT.h(9): error C2228: выражение слева от ".fullname" должно представлять класс, структуру или объединение
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.h(6): см. объявление "golf"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPROT.h(9): error C2228: выражение слева от ".handicap" должно представлять класс, структуру или объединение
1>ConsoleApplication7.cpp(10): error C2079: "g" использует неопределенный struct "golf"
1>ConsoleApplication7.cpp(13): error C2228: выражение слева от ".fullname" должно представлять класс, структуру или объединение
1> тип: int
1>ConsoleApplication7.cpp(15): error C2228: выражение слева от ".fullname" должно представлять класс, структуру или объединение
1> тип: int
1>ConsoleApplication7.cpp(22): error C2228: выражение слева от ".handicap" должно представлять класс, структуру или объединение
1> тип: int
1>ConsoleApplication7.cpp(23): error C2664: "int setgolf(const golf &)": невозможно преобразовать аргумент 1 из "int" в "const golf &"
1> Причина: невозможно преобразовать "int" в "const golf"
1> Исходный или конечный объект имеет неполный тип
1>ConsoleApplication7.cpp(28): error C2664: "void showgolf(const golf &)": невозможно преобразовать аргумент 1 из "int" в "const golf &"
1> Причина: невозможно преобразовать "int" в "const golf"
1> Исходный или конечный объект имеет неполный тип
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


среда Microsoft visual studio - не предупреждает о каких либо ошибках
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
26.01.2016, 21:35 15
Цитата Сообщение от kirillivankin Посмотреть сообщение
чуть чуть переделал код всё тоже самое
А что именно ты там переделал мы конечно же должны догадаться сами?
С таким подходом я вообще не вижу смысла заниматься программированием и задавать вопросы на форуме.
0
19405 / 10024 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
26.01.2016, 21:39 16
Цитата Сообщение от kirillivankin Посмотреть сообщение
golfPROT.h
По смыслу этот файл должен быть *.cpp, а не *.h.
Хотя бы часть ошибок должна уйти.

Добавлено через 1 минуту
Цитата Сообщение от kirillivankin Посмотреть сообщение
#include "golfPROT.h"
В этом случае делать не надо.
0
0 / 0 / 0
Регистрация: 27.07.2014
Сообщений: 35
26.01.2016, 22:02  [ТС] 17
вот переделанный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//golf.cpp
#include <iostream>
#ifndef golg_h_
#define golf_h_
const int Len = 40;
struct golf
{
    char fullname[Len];
    int handicap;
};
int setgolf(const golf & p);
void showgolf(const golf & q);
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
//golfPROT.h
#include "golf.cpp"
#include <iostream>
int setgolf(const golf & p)
{
    return *p.fullname != 0;
}
void showgolf(const golf & q)
{
    std::cout << "у игрока " << q.fullname << " кандикап = " << q.handicap << std::endl ;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//файл с функцией main
#include "stdafx.h"
#include <iostream>
#include "golf.cpp"
#include "golfPROT.h"
int _tmain(int argc, _TCHAR* argv[])
{
    golf g;
    int t;
    std::cout << "введите имя игрока" << std::endl;
    for (int i = 0; i++; g.fullname[i])
    {
        std::cin >> g.fullname[i];
        if (i == 39)
        {
            std::cout << "слишком длинное имя" << std::endl;
        }
    }
    std::cout << "введите гандикап " << std::endl;
    std::cin >> g.handicap;
    t = setgolf(g);
    if (t == 0)
    {
        std::cout << "вы не ввели имени" << std::endl;
    }
    showgolf(g);
    std::cin.get();
    return 0;
ошибки
Кликните здесь для просмотра всего текста
1>------ Сборка начата: проект: ConsoleApplication7, Конфигурация: Release Win32 ------
1> ConsoleApplication7.cpp
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.cpp(4): error C2370: Len: переопределение; другой класс хранения
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.cpp(4): см. объявление "Len"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.cpp(6): error C2011: golf: переопределение типа "struct"
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.cpp(6): см. объявление "golf"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPROT.h(5): error C2027: использование неопределенного типа "golf"
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.cpp(6): см. объявление "golf"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPROT.h(5): error C2228: выражение слева от ".fullname" должно представлять класс, структуру или объединение
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPROT.h(9): error C2027: использование неопределенного типа "golf"
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.cpp(6): см. объявление "golf"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPROT.h(9): error C2228: выражение слева от ".fullname" должно представлять класс, структуру или объединение
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.cpp(6): см. объявление "golf"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPROT.h(9): error C2228: выражение слева от ".handicap" должно представлять класс, структуру или объединение
1>ConsoleApplication7.cpp(10): error C2079: "g" использует неопределенный struct "golf"
1>ConsoleApplication7.cpp(13): error C2228: выражение слева от ".fullname" должно представлять класс, структуру или объединение
1> тип: int
1>ConsoleApplication7.cpp(15): error C2228: выражение слева от ".fullname" должно представлять класс, структуру или объединение
1> тип: int
1>ConsoleApplication7.cpp(22): error C2228: выражение слева от ".handicap" должно представлять класс, структуру или объединение
1> тип: int
1>ConsoleApplication7.cpp(23): error C2664: "int setgolf(const golf &)": невозможно преобразовать аргумент 1 из "int" в "const golf &"
1> Причина: невозможно преобразовать "int" в "const golf"
1> Исходный или конечный объект имеет неполный тип
1>ConsoleApplication7.cpp(28): error C2664: "void showgolf(const golf &)": невозможно преобразовать аргумент 1 из "int" в "const golf &"
1> Причина: невозможно преобразовать "int" в "const golf"
1> Исходный или конечный объект имеет неполный тип
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

после того как изменид golf.h на golf.cpp ничего не изменилось
0
19405 / 10024 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
26.01.2016, 22:10 18
Цитата Сообщение от kirillivankin Посмотреть сообщение
после того как изменид golf.h на golf.cpp ничего не изменилось
Я разве ТАК говорил делать?

golfPROT.h, а не golf.h.
У тебя должно быть три файла.
golf.h (как он есть в исходном - первом сообщении).
golfPROT.cpp - подключает golf.h, (содержимое как в первом сообщении - с определениями функций).
main.cpp - подключает только golf.h
0
0 / 0 / 0
Регистрация: 27.07.2014
Сообщений: 35
27.01.2016, 16:21  [ТС] 19
Цитата Сообщение от DrOffset Посмотреть сообщение
Я разве ТАК говорил делать?
golfPROT.h, а не golf.h.
У тебя должно быть три файла.
golf.h (как он есть в исходном - первом сообщении).
golfPROT.cpp - подключает golf.h, (содержимое как в первом сообщении - с определениями функций).
main.cpp - подключает только golf.h
внёс эти правки, но появились новые ошибки
1>ConsoleApplication7.obj : error LNK2001: неразрешенный внешний символ ""int __cdecl setgolf(struct golf const &)" (?setgolf@@YAHABUgolf@@@Z)"
1>ConsoleApplication7.obj : error LNK2001: неразрешенный внешний символ ""void __cdecl showgolf(struct golf const &)" (?showgolf@@YAXABUgolf@@@Z)"
1>C:\my documents\Visual Studio 2013\Projects\ConsoleApplication7\Release\ConsoleApplication7.exe : fatal error LNK1120: неразрешенных внешних элементов: 2
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
27.01.2016, 16:25 20
Реализаций void isetgolf(const golf & p) и void showgolf(const golf & q) не видит. Где они у тебя?
0
27.01.2016, 16:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2016, 16:25
Помогаю со студенческими работами здесь

Ошибка: невозможно преобразовать аргумент 1 из int** в int [][1000]
Помогите. Уже плавит, но хочу доделать( Ошибка: невозможно преобразовать аргумент 1 из int** в int ...

Ошибка: невозможно преобразовать параметр 4 из 'int' в 'int []'
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; void Your_array (int n, int m, int x); void...

Ошибка С2664: невозможно преобразовать параметр 1 из 'double' в 'const char *'
Ошибка C2664: невозможно преобразовать параметр 1 из 'double' в 'const char *' Visual 2008....

Невозможно преобразовать параметр 1 из 'const char [3]' в 'const wchar_t *
void CprojectDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: добавьте...

Ошибка 1 error C2664: CFileFind::FindFile: невозможно преобразовать параметр 1 из 'const char [7]' в 'LPCTSTR'
Нужно вывести на экран, в консольном режиме имена всех файлов, которые находятся в какой-то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru