Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка C2664

15K
29 марта 2006 года
Aggrassor
7 / / 29.03.2006
Я начал изучать Визуал Си недавно, так что не судите строго. Так вот, когда я компилирую программу (она у меня

консольная) оно выдает ошибку:
error C2664: 'irc_privmsg' : cannot convert parameter 2 from 'const char [1]' to 'char *'
Вот в этой строке кода:
irc_privmsg(sock, channel, sendbuf, FALSE); выдается та ошибка

А вот как у меня объявлена irc_privmsg:
void irc_privmsg(SOCKET sock, char *dest, char *msg, BOOL notice);

Да, и *dest объявлена внутри структуры, как вы уже навероное поняли,вот так: char dest[128];
Собственно и второй параметр т.е channel: const char channel[] = "";
Как я понял при компиляции оно не может конвертировать второй параметр irc_privmsg т.е channel. Они же у меня

все одинаковы т.е объявлены как char. В чем я ошибаюсь, подскажите а то я не понял.
324
30 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Aggrassor
Я начал изучать Визуал Си недавно, так что не судите строго. Так вот, когда я компилирую программу (она у меня

консольная) оно выдает ошибку:
error C2664: 'irc_privmsg' : cannot convert parameter 2 from 'const char [1]' to 'char *'
Вот в этой строке кода:
irc_privmsg(sock, channel, sendbuf, FALSE); выдается та ошибка

А вот как у меня объявлена irc_privmsg:
void irc_privmsg(SOCKET sock, char *dest, char *msg, BOOL notice);

Да, и *dest объявлена внутри структуры, как вы уже навероное поняли,вот так: char dest[128];
Собственно и второй параметр т.е channel: const char channel[] = "";
Как я понял при компиляции оно не может конвертировать второй параметр irc_privmsg т.е channel. Они же у меня

все одинаковы т.е объявлены как char. В чем я ошибаюсь, подскажите а то я не понял.



Попробуй
irc_privmsg(sock, &channel, sendbuf, FALSE);

либо объяви chanel как char *chanel;

395
30 марта 2006 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by AndreySar
Попробуй
irc_privmsg(sock, &channel, sendbuf, FALSE);

либо объяви chanel как char *chanel;


Да не в этом все дело...
На самом деле, у тебя в объявлении функции объявлен неконстантный параметр, а передаешь константу... понятное дело компилятор будет ругаться...

324
30 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by RelB
Да не в этом все дело...
На самом деле, у тебя в объявлении функции объявлен неконстантный параметр, а передаешь константу... понятное дело компилятор будет ругаться...



Присвоить константе не константу можно, а вот наоборот нет

15K
30 марта 2006 года
Aggrassor
7 / / 29.03.2006
Спасибо всем, все работает теперь понял.
395
31 марта 2006 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by AndreySar
Присвоить константе не константу можно, а вот наоборот нет


Присвоить нельзя! Можно только проинициализировать один раз константу неконстантой и все!

324
31 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by RelB
Присвоить нельзя! Можно только проинициализировать один раз константу неконстантой и все!



А что делать с этим?

 
Код:
const char *ch1;

char *ch2 = "11111";
char *ch3 = "22222";

ch1 = ch2;
ch1 = ch3;


а вот так уже нельзя:
 
Код:
const char ch1 = '1';

char ch2 = '2';
char ch3 = '3';

ch1 = ch2;     // тут уже ругается
ch1 = ch3;
395
31 марта 2006 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by AndreySar
А что делать с этим?
 
Код:
const char *ch1;

char *ch2 = "11111";
char *ch3 = "22222";

ch1 = ch2;
ch1 = ch3;


а вот так уже нельзя:
 
Код:
const char ch1 = '1';

char ch2 = '2';
char ch3 = '3';

ch1 = ch2;     // тут уже ругается
ch1 = ch3;


Опять же, все очень просто :)
С указателями const работает иначе, нежели с обычными переменными...
Когда мы объявлем
const char *ch1;
то имеем ввиду, что нам запрещается менять данные, на которые указывает указатель ch1. Т.е. компилятор будет ругаться если мы попробуем сделать следующее:
*ch1 = 'a'

Если же мы хотим объявить именно константный указатель (т.е. тот который все время указывает на одни и теже данные, то следует делать так)
char *const ch1 = "aaaa";

char *ch2 = "11111";
char *ch3 = "22222";

ch1 = ch2; // ошибка
ch1 = ch3; // ошибка

28K
10 апреля 2007 года
SOle
2 / / 10.04.2007
Привет! У меня вот что за проблема.
Следующий код

#include <iostream>
#include "windows.h"
using namespace std;

int main()
{
int fOut;
int fSize;
char fPath[32];
char* buf;

cout << "Vvedite Imja Faila: \n";
cin >> fPath;
fOut = OpenFile (fPath, NULL, OF_READ);
fSize = GetFileSize(fOut, NULL);
_lclose (fOut);
return 0;
}

вылетает с ошибкой C2664: 'GetFileSize' : cannot convert parameter 1 from 'int' to 'void *'!
Почему первый параметр API-функции GetFileSize должен быть void * никак понять не могу... Спасибо за помощь! :)
320
11 апреля 2007 года
m_Valery
1.0K / / 08.01.2007
Как я понял твоя программа должна определять размер указанного
файла.Сделай так.

Код:
#include "stdafx.h"
#include <iostream>
#include <string>
#include "windows.h"
#include <io.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    wcout.imbue(std::locale("Russian_russia.OCP"));
    string name;
    wcout<<L"Введите имя файла"<<endl;
    cin>>name;
    if(_access(name.c_str(),00)==-1){
    wcout<<L"Указан неверный путь или название файла"<<endl;
       }
    FILE *file = fopen(name.c_str(), "rb");
          // получаем дескриптор
             int hFile = _fileno(file);
             int size = _filelength(hFile);
             wcout<<L"Размер указанного файла : "<<size<<L" байт"<<endl;
             fclose(file);
    return 0;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог