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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
史上最悪のデスペナ
記事: 521
登録日時: 9年前

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

#1

投稿記事 by 史上最悪のデスペナ » 7年前

今まで
VC++2010EEでWinsockプログラミングを行うとき

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

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

どうしてでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 7年前

短くした再現できるコードを張ってもらってよいでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

史上最悪のデスペナ
記事: 521
登録日時: 9年前

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

#3

投稿記事 by 史上最悪のデスペナ » 7年前

VC++2010EE上でプログラミング中に赤波線表示されるので、
極端な例ですと

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#4

投稿記事 by softya(ソフト屋) » 7年前

こちらでは再現しません。by VC++2008
なので、とりあえずリビルドを試してみてください。
あと新しいプロジェクトを作ってみるとか試してもらえますか?

そもそも、前のコードをリビルドしてコンパイルが通るのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

史上最悪のデスペナ
記事: 521
登録日時: 9年前

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

#5

投稿記事 by 史上最悪のデスペナ » 7年前

#include <winsock2.h>

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#6

投稿記事 by softya(ソフト屋) » 7年前

史上最悪のデスペナ さんが書きました:#include <winsock2.h>

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

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

ところでリビルドは試されたのでしょうか? これも大事な検証方法なんですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
lriki
記事: 88
登録日時: 9年前

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

#7

投稿記事 by lriki » 7年前

念のためですが・・・

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

史上最悪のデスペナ
記事: 521
登録日時: 9年前

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

#8

投稿記事 by 史上最悪のデスペナ » 7年前

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を使用している場合は読み込まなくても大丈夫なんですね

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#9

投稿記事 by softya(ソフト屋) » 7年前

とりあえず解決してよかったです。

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

バージョンの変なとか破損したとか、つまり問題のあるwinsock2.hが紛れ込んでいるんじゃないかと思ったわけです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

史上最悪のデスペナ
記事: 521
登録日時: 9年前

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

#10

投稿記事 by 史上最悪のデスペナ » 7年前

softya(ソフト屋) さんが書きました:バージョンの変なとか破損したとか、つまり問題のあるwinsock2.hが紛れ込んでいるんじゃないかと思ったわけです。
なるほど。


ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る