2

私は2つのファイルを持っています:

1はmain.cppです

#include<iostream>
using namespace std;

int min(int,int);
int abs(int);
int gcd(int,int);

const char *s = "Read Error!!";

int main()
{
  cout << "Enter first Value: ";
  int i;
  cin >> i;
  while(!cin)
  {
    cout << s << endl;
    cin >> i;
  }

  cout << "Enter second Value: ";
  int j;
  cin >> j;
  while(!cin)
  {
    cout << s << endl;
    cin >> j;
  }

  cout << "\nmin: " << min(i,j) << endl;
  i = abs(i);
  j = abs(j);
  cout << "gcd: " << gcd(i,j) << endl;
  return 0;
}

##2はgcd.cppです
inline int abs(int iobj)
{
  return iobj < 0 ? -iobj : iobj;
}


inline int min(int p1,int p2)
{
  return p1 < p2 ? p1 : p2;
}


int gcd(int v1, int v2)
{
  while(v2)
  {
    int temp = v2;
    v2 = v1 % v2;
    v1 = temp;
  }
  return v1;
}

ここで問題となるのは、2つのファイルを1つコンパイルすると、明らかな理由で問題はありませんが、リンク時にエラーが発生します:main.cpp:(。text+ 0x100): `min(int、int、int、int )'min()の呼び出しを含むステートメントにコメント行を付けると、機能します。さて、なぜ世界でabs()が機能しているのに、gcd()は機能しているのに、min()は機能していないのですか?Linuxでg++を使用しています。

4

3 に答える 3

4

abs通常の関数として標準Cライブラリにあるため、「動作」します。自作absはモジュールからエクスポートされることはありませんinline

同じことが、でも起こりminますが、それは、を除いて、標準ライブラリでは利用できませんtemplate

私のアドバイス:インポート<cstdlib>して、代わりに<algorithm>使用std::absしてください。std::min

于 2011-03-11T11:46:53.773 に答える
-1

stdに「abs」関数があるため、Absはおそらく機能しています。コードを機能させるには、ヘッダーとプロトタイプを追加する必要があります。現在、ファイル1はファイル2に存在するすべてのものを無視します。

于 2011-03-11T11:48:34.410 に答える