2011-01-31 8 views
15

J'ai chassé pendant des heures en essayant de comprendre ce que je fais mal, et je ai exterminé la plupart de mes problèmes, mais quand je tente de compiler mon code en main() il arrive avec ce même message d'erreur:demande pour le membre "..." dans "..." qui est de type non-classe "..."

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

et il se répète pour toutes les fonctions que j'essaie d'appeler main() . Quel est le problème? Je ne peux pas comprendre où est mon erreur. J'utilise Terminal sur un macbook pour compiler le code.

Voici ma fonction principale:

//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(); 
} 

Voici les définitions de fonction de membre de la classe:

//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"; 
} 

est le fichier d'en-tête ici:

#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; 
}; 
+0

Je crois que la réponse nécessite la déclaration de classe ainsi que la définition. –

+0

Je ne pense pas que ceci puisse être diagnostiqué sans le fichier d'entête avec la définition de classe. –

+0

Pourquoi apportez-vous vos numéros en tant qu'ints et en les convertissant en doubles? Pourquoi ne pas les lire directement en double? –

Répondre

0

Vous devriez créer l'instance Program1Math comme ceci:

Program1Math myProgram1Math; 

ou pour affecter l'objet sur le tas, utiliser le mot clé new:

Program1Math *myProgram1Math = new Program1Math(); 
+0

Je ne pensais pas pouvoir utiliser "= new" en C++. N'est-ce pas pour Java? – user596228

+1

-1: C'est la syntaxe Java. En C++, le 'nouveau' n'est pas correct dans ce cas. – Sjoerd

+0

@Sjoerd, En effet, en C++ new renvoie un pointeur et alloue de la mémoire sur le tas. Réponse éditée pour l'exactitude. – mizo

17

la ligne Program1Math myProgram1Math(); est interprété comme une déclaration de fonction myProgram1Math() retour Program1Math;

Il suffit d'utiliser

Program1Math myProgram1Math; 

Utiliser uniquement() lorsqu'un constructeur accepte un paramètre (sans argument par défaut).

EDIT: vous devez compiler tous les fichiers source (.cpp) qui composent votre programme. Cela produira des fichiers objets du même nom avec une extension différente (sur windows c'est un .obj, pour vous c'est .o). Ensuite, tous les fichiers .o doivent être reliés ensemble avec des bibliothèques fournies par le compilateur pour créer votre programme exécutable.

+0

analyse syntaxique le plus contrariant en effet – KitsuneYMG

+0

quand je fais ce que je reçois ce message d'erreur: Undefined symbols: "Program1Math :: displaySine1()", référencé à partir de: _main dans ccIvBynB.o "Program1Math :: displaySine2()", référencé à partir : _main dans ccIvBynB.o "Program1Math :: displayTangent1()", référencé à partir de: _main dans ccIvBynB.o "Program1Math :: Program1Math()", référencé à partir de: _main dans ccIvBynB.o ld: symbole (s) introuvable collect2: ld a renvoyé 1 état de sortie – user596228

+0

Ce sont des erreurs de liens qui vous indiquent que vous n'avez pas fourni d'implémentation pour ces fonctions-membres –

Questions connexes