Po dodaniu pliku nagłówkowego windows.h wyskakują mi błędu z niezgodnością typów przy deklaracji funkcji int max(int *,int) i innych. Windows.h dodałem bo potrzebuje funkcje GetTickCout() jak temu problemowi zaradzić, czemu takie coś występuje >?
W C++ istnieje coś takiego, jak przestrzenie nazw.
Które nie mają nic wspólnego z WINAPI i nie dają się z nim połączyć...
mozna probowac z #define NOMINMAX przed naglowkowym, ale nie zawsze dziala. Z czym u Ciebie sie gryzie ?
#include <iostream>
using namespace std;
//#include <windows.h>
bool czyniepaz(int);
int n_problem(int,int=0);
int n_problemsum(int,int);
int max(int*,int);
void main()
{
int n;
/*cin>>n;
cout<<n_ problem(n);*/
float start;
float end;
// start=GetTickCount();
cout<<n_problemsum(900,1000);
}
int max(int* tab,int length)
{
cout<<"length= "<<length<<endl;
if (tab)
{
int max=tab[0];
for(int i=0;i<length;i++)
{
//cout<<*tab<<endl;
if (*tab>max)
max=*tab;
tab++;
}
return max;
}
else
return 0;
}
bool czyniepaz(int a)
{
return (a % 2);
}
int n_problem(int liczba,int cyclelen)
{
cyclelen++;
//cout<<liczba<<endl;
if (liczba==1)
return cyclelen;
else
if (czyniepaz(liczba))
{
n_problem(3*liczba+1,cyclelen);
}
else
{
n_problem(liczba/2,cyclelen);
}
}
int n_problemsum(int a,int b)
{
int *tab,length;
if ((b-a-1)>0)
{
length=b-a-1;
tab=new int[length];
for (++a;a<b;a++)
{
*tab=n_problem(a);
//cout<<a<<endl;
tab++;
}
}
return max(tab-length,length);
}
Gdy wywale komentarz przy #include -> windows.h to pojawiają się błędy
dodam także że zauważyłem że nie jest to wina kodu bo w poniższym programie problem jest taki sam -> dodaje to żebyście nie musieli szukać błędów w tym wyżej :).
// kk.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
//#include <windows.h>
using namespace std;
int max(int*,int);
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"aaaaaaaaaa";
return 0;
}
int max(int*a,int b)
{
return b;
}
Masz kolizję nazw. Jak zmienisz to swoje max na maks to pójdzie.
nie interesowałem się tym co jest w windows.h poza odliczaniem czasu :) mój błąd dzieki za pomoc -> nie wiedziałem że te błędy odpowiadają za kolizje nazw -> teraz będę już pamiętał
Kompilator pewnie to jasno napisal, ale ani nie wkleiles, ani nie przeczytales.
Oto błędy powstałe w wyniki wykonywania tego pierwszego programu - 3n+1 problem.
Może mi pomoże ktoś po których błędach mogę wywnioskować że chodzi o nie możliwe do zrealizowania przeładowanie funkcji ?
Error 1 error C2062: type 'int' unexpected c:\users\jacek\documents\visual studio 2008\projects\testtt\testtt\testtt.cpp 8
Error 2 error C2062: type 'int' unexpected c:\users\jacek\documents\visual studio 2008\projects\testtt\testtt\testtt.cpp 8
Error 3 error C2059: syntax error : ')' c:\users\jacek\documents\visual studio 2008\projects\testtt\testtt\testtt.cpp 8
Error 6 error C2062: type 'int' unexpected c:\users\jacek\documents\visual studio 2008\projects\testtt\testtt\testtt.cpp 33
Error 7 error C2062: type 'int' unexpected c:\users\jacek\documents\visual studio 2008\projects\testtt\testtt\testtt.cpp 33
Error 8 error C2059: syntax error : ')' c:\users\jacek\documents\visual studio 2008\projects\testtt\testtt\testtt.cpp 33
Error 9 error C2143: syntax error : missing ';' before '{' c:\users\jacek\documents\visual studio 2008\projects\testtt\testtt\testtt.cpp 34
Error 10 error C2447: '{' : missing function header (old-style formal list?) c:\users\jacek\documents\visual studio 2008\projects\testtt\testtt\testtt.cpp 34
Error 12 error C2446: '>' : no conversion from 'int' to 'int *' c:\users\jacek\documents\visual studio 2008\projects\testtt\testtt\testtt.cpp 86
Error 13 error C2040: '>' : 'int *' differs in levels of indirection from 'int' c:\users\jacek\documents\visual studio 2008\projects\testtt\testtt\testtt.cpp 86
Error 14 error C2446: ':' : no conversion from 'int' to 'int *' c:\users\jacek\documents\visual studio 2008\projects\testtt\testtt\testtt.cpp 86
Po litanii bzdurnych i nieoczekiwanych błędów "syntax error", "type int unexpected", "missing cośtam before cośtam" itd. kiedy składnia wygląda prawidłowo. To świadczy o tym, że parser się pogubił, a więc że coś nie jest traktowane tak jak na to wygląda. Prawdopodobnie max z nagłówka windows.h jest makrem, które zostało rozwinięte w miejscu w deklaracji twojej funkcji max, i składnia się posypała.
nawet na pewno jest makrem.. NOMINMAX albo #undef max to podstawa przy pracy z win.h :(