/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
cannot convert `int' to `const void *'...
Fra : Andreas Hjordt


Dato : 10-12-01 16:55

Jeg modtager følgende fejl fra g++ 2.96 . Og har gloet på det for længe. Alt
hjælp ønsket.

<error>
binarysearch.cpp: In function `int main ()':
binarysearch.cpp:25: cannot convert `int' to `const void *' for argument `2'
to
`bsearch (const void *, const void *, unsigned int, unsigned int, int (*)
(const void *, const void *))'
</error>

<code>
#include <string>

template<class T>
int bsearch(T array[], int size, T value)
{
int first = 0, last = size - 1, middle;
while(first <= last)
{
middle = (first + last) / 2;
if(array[middle] == value)
return(middle);
else if(array[middle] > value)
last = middle - 1;
else
first = middle + 1;
}
return(-1);
}


int main()
{
string snot[5] = {"ss", "AA", "zz", "bb", "JJ"};

cout << bsearch(snot , 4, "JJ") << "\n";

return(0);
}

</code>


mvh
Andreas Hjordt



 
 
Kim Petersen (10-12-2001)
Kommentar
Fra : Kim Petersen


Dato : 10-12-01 17:51

"Andreas Hjordt" <ahj@trition.dk> writes:

> Jeg modtager følgende fejl fra g++ 2.96 . Og har gloet på det for længe. Alt
> hjælp ønsket.
>
> <error>
> binarysearch.cpp: In function `int main ()':
> binarysearch.cpp:25: cannot convert `int' to `const void *' for argument `2'
> to
> `bsearch (const void *, const void *, unsigned int, unsigned int, int (*)
> (const void *, const void *))'
> </error>
>
> <code>
> ...snip...
> string snot[5] = {"ss", "AA", "zz", "bb", "JJ"};
>
> cout << bsearch(snot , 4, "JJ") << "\n";
> ...snip...
> </code>

Du kalder jo ikke funktionen korrekt, som gcc ganske rigtigt siger..

Definition (man bsearch):
void *bsearch(const void *key, const void *base, size_t nmemb,
size_t size, int (*compar)(const void *, const void *));

Så det rigtige kald ville være:

bsearch((void *)"JJ",(void *)snot,5,2,strcmp);

(i C og hvis dit array var char *'s)...

Men jeg har nu en alvorlig mistanke, om at det som du gerne vil, slet
ikke er hvad denne funktion gør... men at det du vil have er en funktion
i stil med:

<code>

#include <string>
#include <iostream>

int strfind(string arr[],int count,string key)
{
for (int i=0; i<count; i++)
if (arr[i]==key)
return i;
return -1;
}

int main()
{
string snot[5] = {"ss", "AA", "zz", "bb", "JJ"};

std::cout << strfind(snot , 5, "JJ") << std::endl;

return(0);
}
</code>

bare med en hurtigere routine (siden du valge bsearch).

--
Mvh. Kim Petersen /| Tlf: +4575831551 |\ Jomfru Ingefreds Vej 18
Software Engineer / | Fax: (none atm.) | \ 7100 Vejle
LSS / | Email: kim@vindinggaard.dk | \ DK - Danmark

Andreas Hjordt (10-12-2001)
Kommentar
Fra : Andreas Hjordt


Dato : 10-12-01 18:14

Jeg prøver at lave en template til binarysearch. Ikke at benytte en
eksisterende funktion.
Kompileren siger at fejlen er ved linje 25: cout << bsearch(snot , 4, "JJ")
<< "\n";
Men jeg tror at den er gal med syntaksen her: int bsearch(T array[], int
size, T value)

tak alligevel,
Andreas Hjordt


"Kim Petersen" <kim@vindinggaard.dk> wrote in message
news:snaj2f3i.fsf@mail.vindinggaard.dk...
> "Andreas Hjordt" <ahj@trition.dk> writes:
>
> > Jeg modtager følgende fejl fra g++ 2.96 . Og har gloet på det for længe.
Alt
> > hjælp ønsket.
> >
> > <error>
> > binarysearch.cpp: In function `int main ()':
> > binarysearch.cpp:25: cannot convert `int' to `const void *' for argument
`2'
> > to
> > `bsearch (const void *, const void *, unsigned int, unsigned int, int
(*)
> > (const void *, const void *))'
> > </error>
> >
> > <code>
> > ...snip...
> > string snot[5] = {"ss", "AA", "zz", "bb", "JJ"};
> >
> > cout << bsearch(snot , 4, "JJ") << "\n";
> > ...snip...
> > </code>
>
> Du kalder jo ikke funktionen korrekt, som gcc ganske rigtigt siger..
>
> Definition (man bsearch):
> void *bsearch(const void *key, const void *base, size_t nmemb,
> size_t size, int (*compar)(const void *, const void *));
>
> Så det rigtige kald ville være:
>
> bsearch((void *)"JJ",(void *)snot,5,2,strcmp);
>
> (i C og hvis dit array var char *'s)...
>
> Men jeg har nu en alvorlig mistanke, om at det som du gerne vil, slet
> ikke er hvad denne funktion gør... men at det du vil have er en funktion
> i stil med:
>
> <code>
>
> #include <string>
> #include <iostream>
>
> int strfind(string arr[],int count,string key)
> {
> for (int i=0; i<count; i++)
> if (arr[i]==key)
> return i;
> return -1;
> }
>
> int main()
> {
> string snot[5] = {"ss", "AA", "zz", "bb", "JJ"};
>
> std::cout << strfind(snot , 5, "JJ") << std::endl;
>
> return(0);
> }
> </code>
>
> bare med en hurtigere routine (siden du valge bsearch).
>
> --
> Mvh. Kim Petersen /| Tlf: +4575831551 |\ Jomfru Ingefreds Vej
18
> Software Engineer / | Fax: (none atm.) | \ 7100
Vejle
> LSS / | Email: kim@vindinggaard.dk | \ DK -
Danmark



Kim Petersen (10-12-2001)
Kommentar
Fra : Kim Petersen


Dato : 10-12-01 23:12

"Andreas Hjordt" <ahj@trition.dk> writes:

> Jeg prøver at lave en template til binarysearch. Ikke at benytte en
> eksisterende funktion.
> Kompileren siger at fejlen er ved linje 25: cout << bsearch(snot , 4, "JJ")
> << "\n";
> Men jeg tror at den er gal med syntaksen her: int bsearch(T array[], int
> size, T value)

<Rant>
Glem *alt* i mit tidligere svar!

Jeg er en IDIOT!
</Rant>

Da jeg så dit indlæg - læste jeg fejlen - og skippede direkte til main(),
og overså fuldstændig din nye definition af bsearch() [som er en standard
C function].

Det som er galt, er at du ikke har instantieret templaten [så bruger den
C functionen].

Lav dit kald om til:
bsearch<string>(...)

Og det virker!

--
Mvh. Kim Petersen /| Tlf: +4575831551 |\ Jomfru Ingefreds Vej 18
Software Engineer / | Fax: (none atm.) | \ 7100 Vejle
LSS / | Email: kim@vindinggaard.dk | \ DK - Danmark

Morten Brix Pedersen (10-12-2001)
Kommentar
Fra : Morten Brix Pedersen


Dato : 10-12-01 18:01

Andreas Hjordt wrote:

> Jeg modtager følgende fejl fra g++ 2.96 . Og har gloet på det for længe. Alt
> hjælp ønsket.
[SNIP]
> string snot[5] = {"ss", "AA", "zz", "bb", "JJ"};

^^^
Du bør måske overveje at bruge std::vector istedet, meget nemmere og
mere sikkert end arrays.

#include <string>
#include <vector>
#include <algorithm>

using std::string;
using std::vector;
using std::cout;
using std::find;

int main()
{
vector<string> array;

array.push_back("ss");
array.push_back("AA");
array.push_back("zz");
array.push_back("bb");
array.push_back("JJ");

vector<string>::iterator i = find(array.begin(), array.end(), "JJ");

if (i == array.end()) {
cout << "not found" << endl;
} else {
cout << *i << endl;
}

}

- Morten.


Andreas Hjordt (10-12-2001)
Kommentar
Fra : Andreas Hjordt


Dato : 10-12-01 18:22

Tak men jeg skal til prøve i dynamiske arrays og ved at jeg ved den
lejlighed skal lave en funktion som udføre binarysearch på et array. Så ikke
noget nyt, det er bare hvad jeg har der skal virke.

mvh
Andreas Hjordt


"Morten Brix Pedersen" <morten@wtf.dk> wrote in message
news:3C14EA5A.60702@wtf.dk...
> Andreas Hjordt wrote:
>
> > Jeg modtager følgende fejl fra g++ 2.96 . Og har gloet på det for længe.
Alt
> > hjælp ønsket.
> [SNIP]
> > string snot[5] = {"ss", "AA", "zz", "bb", "JJ"};
>
> ^^^
> Du bør måske overveje at bruge std::vector istedet, meget nemmere og
> mere sikkert end arrays.
>
> #include <string>
> #include <vector>
> #include <algorithm>
>
> using std::string;
> using std::vector;
> using std::cout;
> using std::find;
>
> int main()
> {
> vector<string> array;
>
> array.push_back("ss");
> array.push_back("AA");
> array.push_back("zz");
> array.push_back("bb");
> array.push_back("JJ");
>
> vector<string>::iterator i = find(array.begin(), array.end(), "JJ");
>
> if (i == array.end()) {
> cout << "not found" << endl;
> } else {
> cout << *i << endl;
> }
>
> }
>
> - Morten.
>



Martin Dyring (10-12-2001)
Kommentar
Fra : Martin Dyring


Dato : 10-12-01 18:28

"Andreas Hjordt" <ahj@trition.dk> wrote in message
news:3c14eeb6$0$7883$edfadb0f@dspool01.news.tele.dk...
> Tak men jeg skal til prøve i dynamiske arrays og ved at jeg ved den
> lejlighed skal lave en funktion som udføre binarysearch på et array. Så
ikke
> noget nyt, det er bare hvad jeg har der skal virke.

Lige en tilføjelse til mit andet indlæg ved samme lejlighed:

Hvis din funktion skal virke skal du huske at fodre den med sorteret data
(man kan jo ikke lave en binær søgning i usorteret data).

Held og lykke.

Mvh,
Martin



Andreas Hjordt (10-12-2001)
Kommentar
Fra : Andreas Hjordt


Dato : 10-12-01 19:11


"Martin Dyring" <mda@image.dk> wrote in message
news:Ee6R7.1725$Q3.222101@news010.worldonline.dk...
> "Andreas Hjordt" <ahj@trition.dk> wrote in message
> news:3c14eeb6$0$7883$edfadb0f@dspool01.news.tele.dk...
> > Tak men jeg skal til prøve i dynamiske arrays og ved at jeg ved den
> > lejlighed skal lave en funktion som udføre binarysearch på et array. Så
> ikke
> > noget nyt, det er bare hvad jeg har der skal virke.
>
> Lige en tilføjelse til mit andet indlæg ved samme lejlighed:
>
> Hvis din funktion skal virke skal du huske at fodre den med sorteret data
> (man kan jo ikke lave en binær søgning i usorteret data).

Takker. Jeg har lige lavet en template til bubblesort :)

mvh
Andreas Hjordt



Andreas Hjordt (10-12-2001)
Kommentar
Fra : Andreas Hjordt


Dato : 10-12-01 19:11


"Martin Dyring" <mda@image.dk> wrote in message
news:Ee6R7.1725$Q3.222101@news010.worldonline.dk...
> "Andreas Hjordt" <ahj@trition.dk> wrote in message
> news:3c14eeb6$0$7883$edfadb0f@dspool01.news.tele.dk...
> > Tak men jeg skal til prøve i dynamiske arrays og ved at jeg ved den
> > lejlighed skal lave en funktion som udføre binarysearch på et array. Så
> ikke
> > noget nyt, det er bare hvad jeg har der skal virke.
>
> Lige en tilføjelse til mit andet indlæg ved samme lejlighed:
>
> Hvis din funktion skal virke skal du huske at fodre den med sorteret data
> (man kan jo ikke lave en binær søgning i usorteret data).

Takker. Jeg har lige lavet en template til bubblesort :)

mvh
Andreas Hjordt



Martin Dyring (10-12-2001)
Kommentar
Fra : Martin Dyring


Dato : 10-12-01 18:19

"Andreas Hjordt" <ahj@trition.dk> wrote in message
news:3c14da63$0$77420$edfadb0f@dspool01.news.tele.dk...
> Jeg modtager følgende fejl fra g++ 2.96 . Og har gloet på det for længe.
Alt
> hjælp ønsket.

[snip]

Ved første øjekast ser det ud som om du ikke kalder din egen (template)
udgave af bsearch - men istedet en der er erklæret andetsteds.

Det kald til din hjemmestrikkede bsearch skulle vel se ud i stil med:

int main()
{
string snot[5] = {"ss", "AA", "zz", "bb", "JJ"};
cout << bsearch<string>(snot , 4, "JJ") << "\n";
return(0);
}

Anyhow, med mindre det er en opgave du er sat specifikt til at hjemmebrygge
så vil jeg istedet anbefale dig at kigge nærmere på STL (du kan bl.a. findet
noget dokumentation her: http://www.sgi.com/tech/stl) - nærmere betegnet
upper- samt lower_bound.

Have fun. :)

--
Mvh,
Martin



Andreas Hjordt (10-12-2001)
Kommentar
Fra : Andreas Hjordt


Dato : 10-12-01 18:28

takker det var <string> delen jeg havde glemt. og jo det er en spcifik
opgave jeg har fået stillet.

mvh
Andreas Hjordt


"Martin Dyring" <mda@image.dk> wrote in message
news:276R7.1720$Q3.221070@news010.worldonline.dk...
> "Andreas Hjordt" <ahj@trition.dk> wrote in message
> news:3c14da63$0$77420$edfadb0f@dspool01.news.tele.dk...
> > Jeg modtager følgende fejl fra g++ 2.96 . Og har gloet på det for længe.
> Alt
> > hjælp ønsket.
>
> [snip]
>
> Ved første øjekast ser det ud som om du ikke kalder din egen (template)
> udgave af bsearch - men istedet en der er erklæret andetsteds.
>
> Det kald til din hjemmestrikkede bsearch skulle vel se ud i stil med:
>
> int main()
> {
> string snot[5] = {"ss", "AA", "zz", "bb", "JJ"};
> cout << bsearch<string>(snot , 4, "JJ") << "\n";
> return(0);
> }
>
> Anyhow, med mindre det er en opgave du er sat specifikt til at
hjemmebrygge
> så vil jeg istedet anbefale dig at kigge nærmere på STL (du kan bl.a.
findet
> noget dokumentation her: http://www.sgi.com/tech/stl) - nærmere betegnet
> upper- samt lower_bound.
>
> Have fun. :)
>
> --
> Mvh,
> Martin
>
>



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste