Невозможно удалить отсутствующее;перед ошибкой имени переменной - PullRequest
0 голосов
/ 19 февраля 2011
#ifndef PRODUCTS_H
#define PRODUCTS_H
#include "Products.h"
class Products
{
protected:
    static int count;
    string name_;
    float cost_;
public:
    Products()  // default ctor
    {
        name_ = "";
        cost_ = 0.0f;
        count++;
    }
    Products(string name , float cost)  //parametorized ctor
    {
        name_ = name;
        cost_ = cost;
        count++;
    }
    Products(Products &p )
    {
        name_ = p -> name_;
        cost_ = p -> cost_;
    }

    ~Products()
    {}

    string getName()
    {
        return name_;
    }
     void setName(string name)
    {
        name_=name;
    }
    float getCost()
    {
    return cost_;
    }
    void setCost(float cost)
    {
        cost_=cost
    }
    float CalcTotal(Products *p_products)   //Not made yet!
    {
        float total=0.0f;
        for(int i = 0 ; i < count; i++)
        {
            total += p_products->cost_;
            p_products ++;
        }
        return total;

    }
    Products read()
    {
        Products size,*p_products;
        cout << "Enter Number of Items To Enter:";
        cin >> size;
        cout << endl;
        p_products = new Products[size];
        for(int i = 0 ; i < size; i++)
        {
            cout << "Enter Name:";
            cin >> p_products -> name_;
            cout << endl << "Enter Cost";
            cin >> p_products -> cost_;
            cout << endl;
            p_products ++;
        }
        return p_products;
    }
    void write(Products *p_products)
    {
        for(int i = 0 ; i < count ; i++,p_products++)
        {
            cout<<"Products Name:\t\t"<<p_products->name_<<endl;
            cout<<"Products Price:\t\t"<<p_products->cost_<<endl;
        }
    }
};
#endif

Мой исходный код:

#include <iostream>
#include <string>
#include "Products.h"
using namespace std;
static int Products::count;//declaring static variable
int main()
{
    Products *p_products,temp;
    *p_products=temp.read();
    //temp.write();
    system("pause");
    delete[] Product;
    return 0;
}

Но я получаю эту ошибку, которую не могу удалить:

Ошибка C2146:синтаксическая ошибка: отсутствует ';'перед идентификатором "имя _"

Пожалуйста, помогите мне! Спасибо

Ответы [ 6 ]

3 голосов
/ 19 февраля 2011

Вы должны включить файл заголовка строки в ваш первый файл.Похоже, он жалуется, что не знает, что такое строка.

Вам нужно добавить

#include <string>

и изменить тип name_ на

std::string name_;
2 голосов
/ 19 февраля 2011

в вашем включаемом файле, вы должны объявить строку name_ как std::string name_

2 голосов
/ 19 февраля 2011

Попробуйте переместить эту строку:

using namespace std;

Над строкой, в которой вы #include "Products.h". Но если вы используете string в products.h, вам, вероятно, следует включить туда etc. Кроме того, я полагаю, что "использование пространства имен std" вызывает недовольство.

2 голосов
/ 19 февраля 2011

В Products &p, p является ссылкой на объект типа Products, это не указатель.

Вы должны использовать operator . вместо operator ->, чтобыполучить доступ к справочным полям:

Products(Products &p )
{
    name_ = p -> name_;
    cost_ = p -> cost_;
}
1 голос
/ 19 февраля 2011

Вам не хватает точки с запятой в этой функции:

void setCost(float cost)
{
    cost_=cost
}
1 голос
/ 19 февраля 2011

Вам нужно:

std::string name_;

Кроме того, здесь выглядит пропущенная точка с запятой:

void setCost(float cost)
{
    cost_=cost
}
...