gimmick の回答履歴

全406件中161~180件表示
  • 関数の実体定義にヘッダファイルの2重定義防止方法が効かない?

    いつもお世話になっています。 MFCでCプログラミングをしています。 ヘッダファイルの2重定義防止のために、 ヘッダファイル全体を下記のように 囲みました。 <aaa.h> #ifndef AAA #define AAA #define PI 3.141592 void Func(); int wa(int a, int b){ return a+b; } #endif ビルドしたところ、 関数宣言(Func)や#define部分(PI)については、 2重定義が防止されているようなのですが、 関数の実体部分(関数wa)については、 2重定義防止機能が働かず、 ***.obj : error LNK2005: "int __cdecl wa(int a, int b)" は既に ***.obj で定義されています。 というリンクエラーが表示されます。 関数の種類や ヘッダファイル内の宣言の順番を いろいろ変えてみたのですが同じ結果でした。 ここで、このヘッダファイルの先頭に #pragma onceを使用すると このリンクエラーは回避されるのですが、 他コンパイラとの互換性の観点から、 #pragma once以外の方法で実現する必要があるので、 困っています。 URLを検索してみたのですが、 このような特殊な場合について記述されているものは 見つけられませんでした。 どなたか解決法又はヒントをご教示頂ければ ありがたいです。 よろしくお願いします。

  • ポインタ配列について

    /************配列 change1.c ***********/ #include <stdio.h> void change(char *c) { c[0]='a'; c[1]='b'; c[2]='c'; } int main(int agrc, char **agrv) { change(*++agrv); printf("%s",*agrv); return(0); } /**********ポインタ change2.c ***********/ #include <stdio.h> void change(char *c) { c="abc"; } int main(int agrc, char **agrv) { change(*++agrv); printf("%s",*agrv); return(0); } ********************* この2つのプログラムchange1.c,change2.cにおいて、次のようにしたとき結果がこうなります \change1.exe 123 abc \change2.exe 123 123 change2.c において、ポインタでの文字の格納 c="abc"; は何故実行されないのですか?

  • 文字列でクラス型名を取得したい

    C++においてクラス型名を文字列で取得できるコマンドはありますか? ただいま仕事で行き詰まっております。 宜しくお願い致します。

  • peggyのような機能を持つエディタ

    ペギーの機能で、コメントを /** test */ のように書くと、その行の色が変わりますが、ペギー以外のエディタでこの機能を持つエディタはありませんか? 知っている方いらっしゃれば教えてくださ~い!

  • enumの基礎

    下記のソースをenumを使わずに定義するとどのようになるんですか? 下記のソースの意味が分かるように教えてください。 enum {FALSE, TRUE} i = FALSE;

  • ビジュアルC++でメールを送る

    ビジュアルC++の学習をしていまして、すごく初心者なのですが、メールを飛ばすプログラムを書きたいと思っています。 いくつか参考書を見たのですが、そういう情報がみつかりませんでした。なにか参考になるコード、サイト、書籍がありましたら、是非ご教授下さい。 よろしくお願い致します。

    • ベストアンサー
    • noname#107402
    • C・C++・C#
    • 回答数2
  • 小数の表示が・・・。

    初歩的な質問で申し訳ないです。 「2個の整数値を標準入力装置(キーボード)から読み込み、その平均値を計算して結果を標準出力装置(ディスプレイ)に出力するというプログラムを書きなさい。小数以下1桁を表示すること。」 という問題を考えていたのですが、上手くいきません。 intじゃダメということはわかるのですが、floatやdoubleにしたら答えがおかしくなります。 intで割り切れる数字だったらこれでいいみたいですが割り切れない奴を小数1桁表示ができません。 どうすべきでしょうか? #include <stdio.h> main() { int a,b,c; printf("整数a:"); scanf("%d",&a); printf("整数b:"); scanf("%d",&b); c=(a+b)/2; printf("平均値は%dです。",c); }

  • プレーンテキストで平方根を表現したい

    こんにちは。 バカっぽい質問ですけどプレーンテキストで平方根を表現する方法はありますか。 以前こちらで2^2は2の2乗を表すと教わりましたが今回は逆にルート2の表現方法を教えて欲しいのです。 これを表現するのに業界の標準みたいなものはありますか。 また二次方程式の解を求める公式のようにルートの中にたくさんの文字を入れたいときはどうするのでしょうか。 もしそのような表記方法があるのでしたら、どなたか教えてください。

  • エデットコントロールなどにフォーカスを移す

    エデットコントロールなどにフォーカスを移す 場合どの様なAPI関数を使えばいいのでしょうか? SetFocus()でハンドルを指定したのですが うまくいきません 宜しくお願いいたします。

  • エントリポイントがDLLから見つからない

    WIN2000のVC++6.0を使ってWin32DLLを作成して、VBから呼びたいのですが、「エントリ関数がDLLファイル内に見つからない」言われるので、ためしにVCから呼んでみたのですが、表題のようなエラーになります。内容は入門書のサンプル通りに作ってみたのですが・・・ちゃんとEXPORTされていないのでしょうか? [DLL側] <ヘッダファイル> #ifdef XXXX_EXPORTS #define XXXX_API __declspec(dllexport) #else #define XXXX_API __declspec(dllimport) #endif XXXX_API long AddLong(long a, long b); <ソースファイル> XXXX_API long AddLong(long a, long b) { return a + b; } [呼び出し側VC] #include "stdafx.h" #include "XXXX.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { TCHAR s[20]; wsprintf(s,"%d",AddLong(123,456)); MessageBox(NULL,s,"DLLの参照",MB_OK); return 0; } プロジェクトの設定のリンク時のライブラリには XXXX.lib を追加しました。 初めてのDLL作成でよく分かりません。

  • 配列渡し?について

    下記コードにおいて、一般的?には関数の引数が int max(int a[]){ となっていますが、 int max(int a[1]){ としてもちゃんと作動しました。 規則上どちらの書き方でも問題ないのでしょうか? ********************* #include <stdio.h> int max(int a[1]){   //このように変更した a[2]=a[2]*2; return (a[2]); } int main(void){ int a[5]={1,2,3}; printf("%d\n", max(a)); }

  • 絶対パスがx,y,zのファイル,ホルダを

    c:\p.exeにドラッグしてc:\p.exeを実行したとき [GetCommandLine()] はどのようになるのでしょうか? 98se 95 Borland C++5.5 Comlierでは ["c:\p.exe" x y z] になるのですが Windows2000 + SP3, VC++ 6.0では ["c:\p.exe" "x" "y" "z"] となるそうです Me,Xp,NT,2000でBorland c++5.5 Compiler ではどうのようになるのでしょうか?

  • 英大文字、小文字の変換について

    文字コード体系によっては、 '0'、'1'、・・・、'9'の値は一つづつ増えていくが、 'a'、'b'、・・・、'z'の値が一つづつ増える保証はない。 と聞きました。 英文字を大文字や小文字に変換する関数が成立するためには、少なくとも大文字と小文字の文字コードの整数値に規則性が必要だと思います。 ということは、文字コード体系が異なると、英文字a,b,c・・・は、一つづつ増える保証は無いが、大文字と小文字簡には共通する規則が保証されているということでしょうか? ご存知の方お願いいたします。

  • 英大文字、小文字の変換について

    文字コード体系によっては、 '0'、'1'、・・・、'9'の値は一つづつ増えていくが、 'a'、'b'、・・・、'z'の値が一つづつ増える保証はない。 と聞きました。 英文字を大文字や小文字に変換する関数が成立するためには、少なくとも大文字と小文字の文字コードの整数値に規則性が必要だと思います。 ということは、文字コード体系が異なると、英文字a,b,c・・・は、一つづつ増える保証は無いが、大文字と小文字簡には共通する規則が保証されているということでしょうか? ご存知の方お願いいたします。

  • 空白を含む名前のファイル等を

    受け取るプログラムで ”x y.txt”が一つのファイルと見なされるようにするため yoppiiさんに GetCommandLine() を使うのをやめて __argvや__argc すればいいという事を教えてもらいいったん解決したのですが いろいろ調べてみるとまずい場合がまだあるということがわかりました Windows95のc:\My documをドラッグ実行した場合です 試験用アプリは #include <windows.h> #include <string> using namespace std; WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { string str=""; for(int i=0;i<__argc;str=str+'<'+__argv[i++]+">\n"); MessageBox(NULL,str.c_str(),"Command",MB_OK); return 0; } です 対処方法を教えてください

  • 文字列のコピーについて

    下記<コード1>と<コード2>はどちらも同じに思えますが、実際には<コード2>は”不正な処理”で終了してしまいます。 いろいろ考えたのですが、どうしても違いが理解できません。 理由がお分かりの方お願いいたします。 <コード1> char *str_copy(char *d , const char *s){ char *t=d; while(*d++=*s++) ; return (t); } int main(void) { char s1[128]="ABCD"; char s2[128]="EFGH"; str_copy(s2,s1); <コード2> char *str_copy(char *d , const char *s){ char *t=d; while(*d++=*s++) //不正な処理 ; return (t); } int main(void) { char s1[128]="ABCD"; char *ptr ="EFGH"; str_copy(ptr,s1);

  • ポインタについて

    下記<コード1>ではエラーが出ないのに、 <コード2>のように変更すると、 ”error C2105: '++' には左辺値が必要です。” とエラーが出ます。 どうしてなのか教えて下さい。 <コード1> char *str_copy(char *d , const char *s){ char *t=s2; while(*d++=*s++) ; return (t); } int main(void) { char s1[128]="ABCD"; char s2[128]="EFGH"; str_copy(s2,s1); <コード2> int main(void) { char s1[128]="ABCD"; char s2[128]="EFGH"; // str_copy(s2,s1); while(*s2++=*s1++) ;

  • ヘッダーファイルのインクルード

    VC++6.0です。 ヘッダーファイルをincludeしていいかどうかは どのように決まるのでしょうか? classは、appとhogeの1種類があるとして、 app.h、app.cppとhoge.cpp、hoge.hの4つのファイルがあるとします。 1)appによるhogeのメンバの操作があって、その逆は無い場合 2)hogeもappのメンバを操作する場合 のそれぞれで教えてください。 最初、私は、そのclass内で別のclassのメンバ関数を 呼ぼうと呼ぶまいとincludeしてもかまわないと思っていました。 しかし、自分の作ったプログラムを検討したところ 1)の場合で、hogeのヘッダーに #include "app.h"と入れるとエラーになります。 hogeのcppファイルに#include "app.h"と入れてもエラーになります。

    • ベストアンサー
    • noname#108554
    • C・C++・C#
    • 回答数1
  • 入力する数字のサイズ制限について

    よろしくお願いします。 C言語において、以下のようなコードで数字の入力を 行う場合、入力される数字がintのサイズを超えると問題があります。 int a; printf("数字を入力してください。"); scanf("%d",&a); 一般的に入力される数字のサイズが不明の場合、どのようなコードを書けばよいのでしょうか? ご存知の方お願いします。

  • 入力する数字のサイズ制限について

    よろしくお願いします。 C言語において、以下のようなコードで数字の入力を 行う場合、入力される数字がintのサイズを超えると問題があります。 int a; printf("数字を入力してください。"); scanf("%d",&a); 一般的に入力される数字のサイズが不明の場合、どのようなコードを書けばよいのでしょうか? ご存知の方お願いします。