web-dev-qa-db-ja.com

非クラスタイプ「...」の「...」内のメンバー「...」の要求

私は何が間違っているのかを理解しようと何時間も探し回っていました、そして私は私の問題のほとんどを取り除きました、しかし私がmain()で私のコードをコンパイルしようとするとそれは思いつきますこれと同じエラーメッセージ:

_request for member "..." in "..." which is of non-class type "..."
_

main()で呼び出そうとするすべての関数に対して繰り返されます。何が問題ですか?エラーがどこにあるのかわかりません。

MacBookでターミナルを使用してコードをコンパイルしています。

これが私の主な機能です:

_//Program1.cpp
//Program1Math test function
#include "Program1Math.h"

int main()
{
  //Create a Program1Math object
  Program1Math myProgram1Math();

  myProgram1Math.setNumber1();
  myProgram1Math.setNumber2();

  myProgram1Math.displayMultiple();
  myProgram1Math.displaySine1();
  myProgram1Math.displayTangent1();
  myProgram1Math.displaySine2();
  myProgram1Math.displayTangent2();
}
_

クラスのメンバー関数の定義は次のとおりです。

_//Program1Math.cpp
//Program1Math member-function definitions.
#include <iostream>
#include <cmath>
#include "Program1Math.h"
using namespace std;

//constructor makes a Program1Math, adds an blank line
Program1Math::Program1Math()
{
  cout << "/n";
}

//function to assign the first integer to its appropriate location
void Program1Math::setNumber1()
{
  cout << "Please enter the first integer number /n";
  int numberSpot;
  cin >>numberSpot;
  static_cast<double>(numberSpot);
  number1 = numberSpot;
}

//function to assign the second integer to its appropriate location
void Program1Math::setNumber2()
{
  cout << "Please enter the second integer number /n";
  int numberSpot;
  cin >>numberSpot;
  static_cast<double>(numberSpot);
  number2 = numberSpot;
}

//function to find the sine value for a specified number
void Program1Math::calculateSine( double inputNumber )
{
  sineValue = sin( inputNumber ); 
}

//function to find the tangent value for a specified number
void Program1Math::calculateTangent( double inputNumber )
{
  tangentValue = tan( inputNumber );
}

//function to determine if the user-inputted numbers are multiples of each other
void Program1Math::calculateModulus()
{
  int number1Int = static_cast<int>(number1);
  int number2Int = static_cast<int>(number2);
  int modulusValue = number1Int % number2Int;
  if ( modulusValue == 0 )
    multiple = true;
  else
    multiple = false;
}

//function to display the whether the numbers are multiples or not
void Program1Math::displayMultiple()
{
  if( multiple == true )
    cout<< number1 << " is a multiple of " << number2 << "!/n";
  else
    cout<< number1 << "is not a multiple of " << number2 << "./n";
}

//function to display the sine value of the first number
void Program1Math::displaySine1()
{
  calculateSine( number1 );
  cout << "Sine(" << number1 << ") = " << sineValue << "/n";
}

//function to display the sine value of the second number
void Program1Math::displaySine2()
{
  calculateSine( number2 );
  cout << "Sine(" << number2 << ") = " << sineValue << "/n";
}

//function to display the tangent value of the first number
void Program1Math::displayTangent1()
{
  calculateTangent( number1 );
  cout << "Tan(" << number1 << ") = " << tangentValue << "/n";
}

//function to display the tangent value of the second number
void Program1Math::displayTangent2()
{
  calculateTangent( number2 );
  cout << "Tan(" << number2 << ") = " << tangentValue << "/n";
}
_

ヘッダーファイルは次のとおりです。

_#include <cmath>
using namespace std;

class Program1Math
{
 public:
  Program1Math();
  void setNumber1();
  void setNumber2();
  void calculateSine( double );
  void calculateTangent( double );
  void calculateModulus();
  void displayMultiple();
  void displaySine1();
  void displaySine2();
  void displayTangent1();
  void displayTangent2();
 private:
  double number1;
  double number2;
  double sineValue;
  double tangentValue;
  bool multiple;
};
_
15
user596228

Program1Math myProgram1Math();は、関数宣言myProgram1Math()として解釈されてProgram1Mathを返します。

使用するだけ

 Program1Math myProgram1Math;

コンストラクターがパラメーターを受け入れる場合にのみ()を使用します(デフォルトの引数なし)。

編集:プログラムを構成するすべてのソース(.cpp)ファイルをコンパイルする必要があります。これにより、拡張子が異なる同じ名前のオブジェクトファイルが生成されます(Windowsではこれは.objであり、あなたにとっては.oです)。

その後、実行可能プログラムを作成するには、これらすべての.o-ファイルをコンパイラが提供するライブラリとゲッチャーにリンクする必要があります。

17
engf-010

次のようにProgram1Mathインスタンスを作成する必要があります。

Program1Math myProgram1Math;

または、オブジェクトをヒープに割り当てるには、newキーワードを使用します。

Program1Math *myProgram1Math = new Program1Math();
0
mizo