非常感谢您花时间回答我的问题! 抱歉,对于我所有的大学学校项目,我习惯使用嵌入式C语言来表达我的错误C ++。
好的,我将发布整段代码,由于您的意见,现在已经修改了。
一些答案:
问题是当我不使用" strcmp"我的编译器给了我以下警告:"说明资源路径位置类型 与字符串文字的比较导致未指定的行为[-Waddress] tafel.cpp" 当我输入"结束"它确实表现出一种奇怪的方式退出它并没有停止while循环。 我最初输入的内容(d):见代码
我试图纠正所说的一切。但我确实需要你的tafel :: nieuwebestelling()方法中的tafelnummer静态变量。因为我正在做一个"餐厅计划"。而且这些变量也表示表格编号。例如,如果表1订购5瓶啤酒。载体的含量为5倍啤酒。索引(tafelnummer)将为1.我认为这是开始该计划的好方法。
问题:
--->问题仍然是一样的:首先我去功能" nieuwe bestelling",这允许我填充向量。然后我用toevoegen函数打印矢量但它仍然是空的
代码:
/ * * tafel.cpp *创建时间:2014年7月18日 *作者:亚历克斯 * /
#include "../tafel.h"
#include <vector>
#include <string>
#include <iostream>
tafel::tafel() {
//constr
}
void tafel::nieuwebestelling()
{
std::string besteld;
static int tafelnummer=1;
while(besteld!= "end")
{
std::cout<<"bestelling: ";
std::getline (std::cin,besteld);
bestellingen[tafelnummer].gerechten.push_back(besteld);
}
std::cout<<"---------------------------"<<std::endl;
}
void tafel::toevoegen()
{
int tafelnummer=1;
std::cout<<"----------------------------------"<<std::endl;
std::cout<<"gewijzigd"<<std::endl;
for(unsigned int i =0; i< bestellingen[tafelnummer].gerechten.size(); i++)
{
std::cout<<"i";
std::cout<< bestellingen[tafelnummer].gerechten[i]<<std::endl;
}
std::cout<<"eind"<<std::endl<<std::endl;
std::cin>>tafelnummer; //This is just here so i can clearly see, the point where everything should be printed
}
/*
* tafel.h
*
* Created on: 18 Jul 2014
* Author: alex
*/
#ifndef TAFEL_H_
#define TAFEL_H_
#define tafels 10
#include <iostream>
#include <vector>
#include <string>
class tafel {
public:
static int i;
struct bestelling //elke tafel heeft een struct waarin alle gerechten enzo in staan. ide struct = ide tafel
{
std::vector<std::string>gerechten;
}bestellingen[tafels];
tafel();
void nieuwebestelling();
void toevoegen();
};
#endif /* TAFEL_H_ */
答案 0 :(得分:0)
不确定它是如何工作的(除了评论中指出的明显问题),但在我这方面它是有效的。代码如下:
#include <iostream>
#include <vector>
#include <cstdlib>
#include <cstring>
using namespace std;
const int tafels=16;
class tafel
{
public:
struct bestelling
{
vector<string>gerechten; // <-- the vector
}bestellingen[tafels];
tafel(){};
void nieuwebestelling();
void toevoegen();
virtual ~tafel(){};
};
void tafel::nieuwebestelling()
{
char besteld[20]={};
static int tafelnummer=1;
while((strcmp(besteld,"end"))!=0)
{
cout<<"YOUR ORDER: ";
cin.getline(besteld,20);
bestellingen[tafelnummer].gerechten.push_back(besteld);
}
cout<<"---------------------------"<<endl;
}
void tafel::toevoegen()
{
int tafelnummer=1;
cout<<"THE VECTOR:"<<endl; //contains what you ordered previously.
//DOESN T GET PRINTED
for(unsigned int i =0; i< bestellingen[tafelnummer].gerechten.size(); i++)
{
cout<< bestellingen[tafelnummer].gerechten[i]<<endl;
}
cout <<"end"<<endl<<endl; //is printed
}
int main()
{
tafel foo;
foo.nieuwebestelling();
foo. toevoegen(); // it prints the vector
}
答案 1 :(得分:0)
首先,您可能希望在问题中发布可编辑的示例代码。
例如,在您发布的代码中,您有一个原始C类数组struct bestelling
,它是tafel
类的数据成员:bestellingen[tafels]
。但tafels
定义在哪里?
此外,您的代码质量很低,因为它混合了C-isms和C ++的东西。
例如,为什么要混合std::vector
和原始C类数组?
除非有充分的理由不这样做,否则您应该始终将 std::vector
视为C ++中的默认容器,而不是原始的C类数组。
此外,您使用strcmp()
来比较字符串,并使用原始char
数组来存储字符串。那个糟糕的C ++。只需考虑使用std::string
类,它正确地重载operator==
进行比较,并且比原始的类C char
数组好得多。
换句话说,我建议你从旧的C风格&#34;混合中移植你的代码。和C ++,使用std::vector
和std::string
的纯C ++现代代码。
如果您调用std::vector
方法,push_back()
会自动增长,因此您不需要tafelnummer
方法中的static
tafel::nieuwebestelling()
变量。只需使用std::vector
及其push_back()
方法向向量添加新内容。
此外,在标头文件中,使用带有std::
前缀的完全限定名称,例如std::vector
(不是vector
)。实际上,头文件中的using namespace std;
会污染全局命名空间,这是一种不好的做法。