ページ 11

~の値の型を~のエンティティに・・・・・・

Posted: 2012年11月11日(日) 20:28
by 史上最悪のデスペナ
今まで
VC++2010EEでWinsockプログラミングを行うとき

hostent *host = gethostbyname( "※※※" );
とやっていました。

新しくプログラムを組む時にそれをコピペしたのですが
Error:型”hostent *”の値を型”hostent *”のエンティティに割り当てることはできません
と出ます。
ここの型が不一致なら出る理由は分かるのですが、同じはずなのになぜ出るのかが分かりません。

どうしてでしょうか?

Re: ~の値の型を~のエンティティに・・・・・・

Posted: 2012年11月11日(日) 21:54
by softya(ソフト屋)
短くした再現できるコードを張ってもらってよいでしょうか?

Re: ~の値の型を~のエンティティに・・・・・・

Posted: 2012年11月11日(日) 22:15
by 史上最悪のデスペナ
VC++2010EE上でプログラミング中に赤波線表示されるので、
極端な例ですと

#incoude <winsock2.h>
void main()
{
hostent *host = gethostbyname( "※※※" );
}

と書いただけでもなります

Re: ~の値の型を~のエンティティに・・・・・・

Posted: 2012年11月11日(日) 22:37
by softya(ソフト屋)
こちらでは再現しません。by VC++2008
なので、とりあえずリビルドを試してみてください。
あと新しいプロジェクトを作ってみるとか試してもらえますか?

そもそも、前のコードをリビルドしてコンパイルが通るのでしょうか?

Re: ~の値の型を~のエンティティに・・・・・・

Posted: 2012年11月12日(月) 18:07
by 史上最悪のデスペナ
#include <winsock2.h>

#include<winsock.h>
に変えたらうまく行きました

ws2_32.libもちゃんとリンクしてるのですが・・・・・・・・
WSAStartup()では2.0を指定しているのでwinsock2の方が望ましいと思うんですけどね・・・・・・

Re: ~の値の型を~のエンティティに・・・・・・

Posted: 2012年11月12日(月) 18:10
by softya(ソフト屋)
史上最悪のデスペナ さんが書きました:#include <winsock2.h>

#include<winsock.h>
に変えたらうまく行きました

ws2_32.libもちゃんとリンクしてるのですが・・・・・・・・
WSAStartup()では2.0を指定しているのでwinsock2の方が望ましいと思うんですけどね・・・・・・
ws2_32.libはリンクの問題なのでコンパイル時は無関係です。
どこの<winsock2.h>を参照しているか気になる所なんですが放置する気みたいですね・・・。
あとで困らないと良いのですが。

ところでリビルドは試されたのでしょうか? これも大事な検証方法なんですよ。

Re: ~の値の型を~のエンティティに・・・・・・

Posted: 2012年11月12日(月) 20:58
by lriki
念のためですが・・・

winsock2.h は windows.h の前でinclude する必要があります。
vc++プロジェクトを作るとき、ウィザードでいろいろいじってるとき等は注意です。

Re: ~の値の型を~のエンティティに・・・・・・

Posted: 2012年11月13日(火) 07:57
by 史上最悪のデスペナ
softya(ソフト屋) さんが書きました:ws2_32.libはリンクの問題なのでコンパイル時は無関係です。
そうなんですか
softya(ソフト屋) さんが書きました:どこの<winsock2.h>を参照しているか気になる所なんですが放置する気みたいですね・・・。
あとで困らないと良いのですが。
どこの・・・・・とはどういうことでしょう?
softya(ソフト屋) さんが書きました:ところでリビルドは試されたのでしょうか? これも大事な検証方法なんですよ。
リビルドどころかプロジェクトを新規作成しても変わりませんでした
梨樹 さんが書きました:winsock2.h は windows.h の前でinclude する必要があります。
知らなかったです。これで解決しました
史上最悪のデスペナ さんが書きました:#incoude <winsock2.h>
void main()
{
hostent *host = gethostbyname( "※※※" );
}
こちらも、winsock2の後にWindows.hをインクルードで解決です。
今知りましたが・・・・Dxlibを使用している場合は読み込まなくても大丈夫なんですね

Re: ~の値の型を~のエンティティに・・・・・・

Posted: 2012年11月13日(火) 09:36
by softya(ソフト屋)
とりあえず解決してよかったです。

>どこの・・・・・とはどういうことでしょう?

バージョンの変なとか破損したとか、つまり問題のあるwinsock2.hが紛れ込んでいるんじゃないかと思ったわけです。

Re: ~の値の型を~のエンティティに・・・・・・

Posted: 2012年11月14日(水) 09:48
by 史上最悪のデスペナ
softya(ソフト屋) さんが書きました:バージョンの変なとか破損したとか、つまり問題のあるwinsock2.hが紛れ込んでいるんじゃないかと思ったわけです。
なるほど。


ありがとうございました