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

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

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

Сделал многофайловую программу программу, вот она:
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
Ответы с готовыми решениями:

Где ошибка невозможно преобразовать указатель "this" из "const pers" в "pers &" при выводе объектов через cout
Добрый день! Переписал код из книг Лафоре, создание мультимножества из собственных объектов-...

Ошибка: "невозможно преобразовать аргумент 1 из "int [3][3]" в "int **""
Приветствую, сделал задание, но выдает вот такую ошибку &quot;int sum(int **,int)&quot;: невозможно...

Error C2664: RegisterClassW: невозможно преобразовать параметр 1 из "WNDCLASSEX *" в "const WNDCLASSW *"
почему выдаёт ошибку? int RegClass(WNDPROC Proc,LPCTSTR szName,UINT brBackground){ WNDCLASSEX...

Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *"
string s = &quot;555 44 55 66&quot;;//размер строки заранее неизвестен char* p =...

35
Don't worry, be happy
17213 / 10089 / 1948
Регистрация: 27.09.2012
Сообщений: 25,186
Записей в блоге: 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
Don't worry, be happy
17213 / 10089 / 1948
Регистрация: 27.09.2012
Сообщений: 25,186
Записей в блоге: 1
26.01.2016, 20:59 4
Цитата Сообщение от kirillivankin Посмотреть сообщение
но файл всё ровно не компилируется
Ошибка где?
0
334 / 182 / 80
Регистрация: 22.08.2013
Сообщений: 724
26.01.2016, 21:05 5
Цитата Сообщение от kirillivankin Посмотреть сообщение
'""'
Это что?
Цитата Сообщение от kirillivankin Посмотреть сообщение
for (int i; i++; p.fullname)
Значение i чему равно?
0
15262 / 8229 / 1993
Регистрация: 30.01.2014
Сообщений: 14,013
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
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 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
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 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
15262 / 8229 / 1993
Регистрация: 30.01.2014
Сообщений: 14,013
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\golfPR OT.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\golfPR OT.h(5): error C2228: выражение слева от ".fullname" должно представлять класс, структуру или объединение
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPR OT.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\golfPR OT.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\golfPR OT.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
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
26.01.2016, 21:35 15
Цитата Сообщение от kirillivankin Посмотреть сообщение
чуть чуть переделал код всё тоже самое
А что именно ты там переделал мы конечно же должны догадаться сами?
С таким подходом я вообще не вижу смысла заниматься программированием и задавать вопросы на форуме.
0
15262 / 8229 / 1993
Регистрация: 30.01.2014
Сообщений: 14,013
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.c pp(4): error C2370: Len: переопределение; другой класс хранения
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.c pp(4): см. объявление "Len"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.c pp(6): error C2011: golf: переопределение типа "struct"
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.c pp(6): см. объявление "golf"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPR OT.h(5): error C2027: использование неопределенного типа "golf"
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.c pp(6): см. объявление "golf"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPR OT.h(5): error C2228: выражение слева от ".fullname" должно представлять класс, структуру или объединение
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPR OT.h(9): error C2027: использование неопределенного типа "golf"
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.c pp(6): см. объявление "golf"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPR OT.h(9): error C2228: выражение слева от ".fullname" должно представлять класс, структуру или объединение
1> c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golf.c pp(6): см. объявление "golf"
1>c:\my documents\visual studio 2013\projects\consoleapplication7\consoleapplication7\golfPR OT.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
15262 / 8229 / 1993
Регистрация: 30.01.2014
Сообщений: 14,013
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\ConsoleApplication 7.exe : fatal error LNK1120: неразрешенных внешних элементов: 2
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
334 / 182 / 80
Регистрация: 22.08.2013
Сообщений: 724
27.01.2016, 16:25 20
Реализаций void isetgolf(const golf & p) и void showgolf(const golf & q) не видит. Где они у тебя?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2016, 16:25

Error C2664: atoi: невозможно преобразовать параметр 1 из "_TCHAR *" в "const char *" Как исправить эту ошибку в коде?
#include &quot;stdafx.h&quot; #define _XOPEN_SOURCE 500 #include &lt;conio.h&gt; #include &lt;stdio.h&gt;...

Ошибка "невозможно преобразовать аргумент 1 из "Myclass" в "double""
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cmath&gt; using namespace std; class Myclass {...

Невозможно преобразовать параметр 1 из "const wchar_t [12]" в "const char *"
Писал программу. Дошел до наложения текстур. Пытаюсь наложить 4-й час. Много разных ошибок. Все...

невозможно преобразовать параметр 1 из "const char [8]" в "LPCWSTR"
msoftcon.h //msoftcon.h //declarations for Lafore's console graphics functions //uses Window's...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.