今まで
VC++2010EEでWinsockプログラミングを行うとき
hostent *host = gethostbyname( "※※※" );
とやっていました。
新しくプログラムを組む時にそれをコピペしたのですが
Error:型”hostent *”の値を型”hostent *”のエンティティに割り当てることはできません
と出ます。
ここの型が不一致なら出る理由は分かるのですが、同じはずなのになぜ出るのかが分かりません。
どうしてでしょうか?
~の値の型を~のエンティティに・・・・・・
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: ~の値の型を~のエンティティに・・・・・・
短くした再現できるコードを張ってもらってよいでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ~の値の型を~のエンティティに・・・・・・
VC++2010EE上でプログラミング中に赤波線表示されるので、
極端な例ですと
#incoude <winsock2.h>
void main()
{
hostent *host = gethostbyname( "※※※" );
}
と書いただけでもなります
極端な例ですと
#incoude <winsock2.h>
void main()
{
hostent *host = gethostbyname( "※※※" );
}
と書いただけでもなります
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: ~の値の型を~のエンティティに・・・・・・
こちらでは再現しません。by VC++2008
なので、とりあえずリビルドを試してみてください。
あと新しいプロジェクトを作ってみるとか試してもらえますか?
そもそも、前のコードをリビルドしてコンパイルが通るのでしょうか?
なので、とりあえずリビルドを試してみてください。
あと新しいプロジェクトを作ってみるとか試してもらえますか?
そもそも、前のコードをリビルドしてコンパイルが通るのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ~の値の型を~のエンティティに・・・・・・
#include <winsock2.h>
を
#include<winsock.h>
に変えたらうまく行きました
ws2_32.libもちゃんとリンクしてるのですが・・・・・・・・
WSAStartup()では2.0を指定しているのでwinsock2の方が望ましいと思うんですけどね・・・・・・
を
#include<winsock.h>
に変えたらうまく行きました
ws2_32.libもちゃんとリンクしてるのですが・・・・・・・・
WSAStartup()では2.0を指定しているのでwinsock2の方が望ましいと思うんですけどね・・・・・・
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: ~の値の型を~のエンティティに・・・・・・
ws2_32.libはリンクの問題なのでコンパイル時は無関係です。史上最悪のデスペナ さんが書きました:#include <winsock2.h>
を
#include<winsock.h>
に変えたらうまく行きました
ws2_32.libもちゃんとリンクしてるのですが・・・・・・・・
WSAStartup()では2.0を指定しているのでwinsock2の方が望ましいと思うんですけどね・・・・・・
どこの<winsock2.h>を参照しているか気になる所なんですが放置する気みたいですね・・・。
あとで困らないと良いのですが。
ところでリビルドは試されたのでしょうか? これも大事な検証方法なんですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ~の値の型を~のエンティティに・・・・・・
念のためですが・・・
winsock2.h は windows.h の前でinclude する必要があります。
vc++プロジェクトを作るとき、ウィザードでいろいろいじってるとき等は注意です。
winsock2.h は windows.h の前でinclude する必要があります。
vc++プロジェクトを作るとき、ウィザードでいろいろいじってるとき等は注意です。
Re: ~の値の型を~のエンティティに・・・・・・
そうなんですかsoftya(ソフト屋) さんが書きました:ws2_32.libはリンクの問題なのでコンパイル時は無関係です。
どこの・・・・・とはどういうことでしょう?softya(ソフト屋) さんが書きました:どこの<winsock2.h>を参照しているか気になる所なんですが放置する気みたいですね・・・。
あとで困らないと良いのですが。
リビルドどころかプロジェクトを新規作成しても変わりませんでしたsoftya(ソフト屋) さんが書きました:ところでリビルドは試されたのでしょうか? これも大事な検証方法なんですよ。
知らなかったです。これで解決しました梨樹 さんが書きました:winsock2.h は windows.h の前でinclude する必要があります。
こちらも、winsock2の後にWindows.hをインクルードで解決です。史上最悪のデスペナ さんが書きました:#incoude <winsock2.h>
void main()
{
hostent *host = gethostbyname( "※※※" );
}
今知りましたが・・・・Dxlibを使用している場合は読み込まなくても大丈夫なんですね
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: ~の値の型を~のエンティティに・・・・・・
とりあえず解決してよかったです。
>どこの・・・・・とはどういうことでしょう?
バージョンの変なとか破損したとか、つまり問題のあるwinsock2.hが紛れ込んでいるんじゃないかと思ったわけです。
>どこの・・・・・とはどういうことでしょう?
バージョンの変なとか破損したとか、つまり問題のあるwinsock2.hが紛れ込んでいるんじゃないかと思ったわけです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ~の値の型を~のエンティティに・・・・・・
なるほど。softya(ソフト屋) さんが書きました:バージョンの変なとか破損したとか、つまり問題のあるwinsock2.hが紛れ込んでいるんじゃないかと思ったわけです。
ありがとうございました