Выкарыстанне загалоўка файла ў C ++ праграме

У мяне ёсць пытанне да праграмы C ++ кадавання з загалоўка файла.

Гэта мой файл header.h:

#include 

using namespace std;

class Rectangle
{
public:
Rectangle(double width, double length);
double get_perimeter();
double  get_area();
void resize(double factor);

private:
double width;
double length;
double area;
double factor;
};

І гэта мой Question1.cpp файл, які захоўвае ўсе метады:

#include 

using namespace std;

class Rectangle
{
public:
Rectangle(double width, double length)
{
    width = width;  //I have no idea how to use this.something as its in Java
    length = length; //Problem probably occurs at here
}

double Rectangle::get_perimeter()
{
    return ((width * 2) + (length * 2)) ;
}

double Rectangle::get_area()
{
    return (width * length);
}

void Rectangle::resize(double factor)
{ 
    width *= factor;
    length *= factor;
}

private:
double width;
double length;
double area;
double factor;
};

І, нарэшце, вось мой галоўны method.cpp:

#include 
#include "header.h";

using namespace std;

int main()
{
Rectangle rectangle1(2.5,7.0);
cout << rectangle1.get_perimeter();
cout << rectangle1.get_area();

system("PAUSE");
return 0;
}

Аднак, калі я спрабую запусціць праграму, сістэма сказаў мне, што ёсць памылкі пабудовы і недазволеных знешніх, якія я паняцця не маю, чаму гэта так. Можа хто-то калі ласка, дапамажыце мне выправіць гэта?

Загадзя дзякую.

2
Вы можаце выкарыстоўвацца this-> шырыня = шырыня .
дададзена аўтар Paul Manta, крыніца
Якія памылкі? Якія лініі выклікалі памылкі? Вы праверылі sscce.org ?
дададзена аўтар Mark Garcia, крыніца
Не выкарыстоўвайце выкарыстанне імёнаў ... у назвах старонак.
дададзена аўтар soon, крыніца
вам неабходна ўключыць header.h ў файле questestion CPP, і вы павінны выкарыстоўваць гэты паказальнік: this-> шырыня = шырыня;
дададзена аўтар dinony, крыніца
Прастакутнік клас пераазначэнне ў question1.cpp радку 5
дададзена аўтар Yvonne, крыніца

9 адказы

Мала што распускаць тут.

1) use this->width which is equivalent to java's this.width (In C++, this is a pointer). Actually some C++ programmers (including me) prefix member variables with m_. Then you can just write m_width = width.

2) ўключаюць у сябе «header.h» у верхняй частцы Question1.cpp

3) не ставіць «выкарыстоўваючы патезрасе» у файле загалоўка, ці вы можаце атрымаць ненаўмыснага прастору імёнаў сутыкнення, як ваш код пашыраецца. OK, каб змясціць яго ў асобных зыходных файлах, хоць, хоць некаторыя народныя нават адбіць гэта.

4) у залежнасці ад кампілятара і кампаноўніка, вам неабходна звязаць з рознымі библитеками, што бібліятэка iostream выкарыстоўвае. Можа быць, калі вы паведаміце нам кампілятар вы карыстаецеся, мы можам дапамагчы вам у гэтым.

5) Вы павінны акружыць загаловак з

#ifndef ARBITRARY_TEXT_BUT_DISTINCT_FROM_ANY_OTHER_IN_YOUR_PROGRAM
#define ARBITRARY_TEXT_BUT_DISTINCT_FROM_ANY_OTHER_IN_YOUR_PROGRAM
...your code here
#endif

Гэта ўключае ахову - дапамагае прадухіліць шматразовае ўключэнне файла загалоўка змесціва.

2
дададзена

Вашы рэалізацыі не павінны выглядаць

class Rectangle
{
public:
Rectangle(double width, double length) { .... }

але як

Rectangle::Rectangle(double width, double length) : width(width), length(length) {}

Вам трэба ўключыць header.h у рэалізацыі .cpp файл і ў любы файл, які патрабуецца вызначэнне Прастакутнік класа. Акрамя таго, неабходна ўключаюць ахову ў назвах старонак. І <�моцны> то і не давайце з дапамогай патезрасе ў загалоўку . На самай справе, не стаўце яго ў любым месцы.

2
дададзена
@Yvonne Прачытайце спасылку на ўключае ахову. Гэта кажа вам, што рабіць.
дададзена аўтар juanchopanza, крыніца
Так што я проста пішу #include ахоўнік у файл загалоўка? Але ёсць памылка
дададзена аўтар Yvonne, крыніца
Добра атрымаў яго дзякуючы
дададзена аўтар Yvonne, крыніца

Change .h to ->

#include 

using namespace std;

class Rectangle
{
public:
    Rectangle(double width, double length);
    double get_perimeter();
    double  get_area();
    void resize(double factor);

private:
double width;
double length;
double area;
double factor;
};

Then .cpp to->

#include 
#include "header.h"
using namespace std;


Rectangle::Rectangle(double width, double length)
{
    this->width = width;  //I have no idea how to use this.something as its in Java
    this->length = length; //Problem probably occurs at here
}

double Rectangle::get_perimeter()
{
    return ((this->width * 2) + (this->length * 2)) ;
}

double Rectangle::get_area()
{
    return (this->width * this->length);
}

void Rectangle::resize(double factor)
{ 
    this->width *= factor;
    this->length *= factor;
}

Гэта павінна працаваць тады. З павагай, Luka

2
дададзена
добры і поўны адказ
дададзена аўтар ahmedsafan86, крыніца
Дзякуючы. Гэта працуе.
дададзена аўтар Yvonne, крыніца

У Question1.cpp вы павінны ўключыць header.h

І не забудзьцеся ўключыць ахоўнік у header.h

Таксама ў Question1.cpp вы павінны змяніць

Rectangle(double width, double length)

у

Rectangle::Rectangle(double width, double length)
1
дададзена

вялікая памылка, што ў файле .cpp вы павінны рэалізаваць толькі метады не перапісаць рэалізацыю поўнага класа паспрабаваць наступнае ў .cpp файле

Прастакутнік :: прастакутнік (падвойная шырыня, падвойная даўжыня) {     шырыня = шырыня;//Я паняцця не маю, як выкарыстоўваць this.something, як яго ў Java     даўжыня = даўжыня;//Праблема, верагодна, адбываецца тут } і не ўключаюць у сябе метады ў класе {}; блок і ня перавызначаць зменныя-члены Таксама не забудзьцеся ўключыць файл загалоўка ў файле .cpp

дзякуй

0
дададзена

Цікава, калі вы атрымліваеце памылкі кампаноўніка ў файл CPP крыху дзіўна

У файле CPP ўключыць файл .h і толькі выконваць такія функцыі, як

Rectangle::Rectangle(double width, double length){
 //implement
}

double Rectangle::get_perimeter(){
 //implement
}

double Rectangle::get_area(){
  //implement
}

void Rectangle::resize(double factor){
  //implement
}
0
дададзена

Вы павінны распавесці сваю сістэму зборкі для кампіляцыі «question1.cpp». Звычайна ёсць «дадаць існуючы файл праекта» пункт меню недзе пад «Файл».

І, як правіла, ваш клас і канструктар будзе выкарыстоўваць іншае імя, чым ўваходных параметр. Многія людзі ставяць прэфікс ў begginning (mLength, iLength) або постфикс ў канцы (length_ з'яўляецца агульным).

The other solution is to prefix the member variable with this->length, but that can get pretty messy after a while.

0
дададзена

Калі вы хочаце падзяліць ваш файл класа ў * .cpp і * .h файл, ён заўсёды мае наступны выгляд:

rectangle.h:

#ifndef __RECTANGLE_H_
#define __RECTANGLE_H_
#include 
using namespace std;

class Rectangle
{
public:
Rectangle(double width, double length);
double get_perimeter();
double  get_area();
void resize(double factor);

private:
double width;
double length;
double area;
double factor;
};
#endif

цяпер rectangle.cpp павінен мець наступны выгляд:

#include 
#include "rectangle.h"
using namespace std;

Rectangle(double width, double length)
{
    width = width;  //I have no idea how to use this.something as its in Java
    length = length; //Problem probably occurs at here
}

double Rectangle::get_perimeter()
{
    return ((width * 2) + (length * 2)) ;
}

double Rectangle::get_area()
{
    return (width * length);
}

void Rectangle::resize(double factor)
{ 
    width *= factor;
    length *= factor;
}

таму, калі ў якасці тлумачэння: Файл загалоўка кажа вам, якія поля і метады даступныя і * .cpp файл рэалізуе метады.

У вашым main.cpp вам проста трэба ўключыць O rectangle.h

0
дададзена

гэты код ніжэй работ

#include
#include
using namespace std;
class student
{
private:
int area;//hours;
float perimeter;//gpa;
public:
void addcourse(int len, float wid)
{
float sum;
sum = area * perimeter;
area += len;
sum += wid * len;
perimeter = sum/area;
}
student()  //constructor
{
area = 0;
perimeter= 0.0;
}
};


int main()
{
student s;
int length;//classhours;//l
float width;//classgpa;//w
cout << "Enter length ( 1 to end):  ";
cin >> length;
while(length !=  1)
{
cout << "Enter width:  ";
cin >> width;

s.addcourse(length, width);

cout << "Enter length ( 1 to end):   ";
cin >> length;
}

// cout << "Rectangle's length = " << r.getlength() << endl;
//    cout << "Rectangle's width = " << r.getwidth() << endl;
//    cout << "Rectangle's area = " << r.getarea() << endl;
//   cout << "Rectangle's perimeter = " << r.getperimeter() << endl;
}
0
дададзена