此代码将无法编译:
for(vector<Box>::iterator it = shapes.end(); it >= shapes.begin(); --it){
*it.update(1,1);
*it.draw();
}
Run Code Online (Sandbox Code Playgroud)
它声称:
main.cpp:80:17: error: ‘std::vector<Box>::iterator’ has no member named ‘update’
main.cpp:81:17: error: ‘std::vector<Box>::iterator’ has no member named ‘draw’
Run Code Online (Sandbox Code Playgroud)
但是AFAIK,那个代码没有尝试调用vector :: iterator.draw(),它取消引用迭代器,它应该给我一个我的类框的对象,它有这些方法.我做错了什么,抱歉这个糟糕的头衔.
因为我目前正在学习C++中的指针,所以我想知道语法.因此,当我想在对象上使用指针时,我不必取消引用它,以便访问类属性.当我只想在一个简单变量上使用指针时,我必须使用*来改变它的值.
那么为什么我不必使用*作为对象呢?因为我认为我只会更改内存地址.
宾语:
int age = 20;
User John(age);
User *ptrUser = &John;
ptrUser->printAge(); // 20 (why no *ptrUser->printAge() ??? )
cout << ptrUser // 0x123456...
Run Code Online (Sandbox Code Playgroud)
变量:
int a = 10;
int *ptrA = &a;
*ptrA = 20;
cout << a // 20
Run Code Online (Sandbox Code Playgroud)
非常感谢你!
我知道之前在类似情况下已经问过这个问题,但是我是C++的新手,无法弄清楚需要做什么或者为什么要这样做.基本上我使用的是我创建的Person对象,它具有变量名称,年龄,高度和权重.我需要对我创建的Person对象运行快速排序,并按年龄对它们进行排序.
人员类:
class Person{
private:
string name;
int age, height, weight;
public:
Person(string name = "empty", int age = 0, int height = 0, int weight = 0)
{
this->name = name;
this->age = age;
this->height = height;
this->weight = weight;
};
Run Code Online (Sandbox Code Playgroud)
快速排序方法:
// Quick Sort
void QuickSort(Person *A, int start, int end){
if(start < end){
int p = partition(A, start, end);
QuickSort(A, start, p - 1);
QuickSort(A, p + 1, end);
}
}
int partition(Person *A, int start, int …Run Code Online (Sandbox Code Playgroud) 我正在研究 C++ 类。
我基本上是在重新制作我在这里所做的事情,但是在 C++ 中。
它进展顺利,但我不明白错误member reference type 'Human *' is a pointer; did you mean to use '->'?意味着什么。我从未使用过->,也见过*以这种方式使用过(例如const char *),但我不太确定它是如何工作的。
我发现的最接近的问题是这个,但答复没有帮助。
这是我的代码
#include <stdio.h>
#include <cstdlib>
#include <iostream>
using std::cout;
using std::cin;
using std::string;
class Human {
public:
string Name;
int Age;
double Height;
void Initialise(string name, int age, double height) {
this.Name = name; // Error here
this.Age = age; // Error here
this.Height = …Run Code Online (Sandbox Code Playgroud) 我刚开始学习c ++而且我被困在这里.我做了一个结构
...
struct student{
string name;
int roll;
};
...
Run Code Online (Sandbox Code Playgroud)
然后,我在全球范围内称呼它.student s1[20];在我的主要功能中,我做了类似的事情
...
int count=0;
student *p;
p=s1;
cout<<"Enter the Number of records, you wish to consider.";
cin>>arraySize;
p = new student[arraySize];
while (count!=arraySize) {
cout<<"Enter name.";
cin>>*(p+count)->name; //Error comes over here
}
...
Run Code Online (Sandbox Code Playgroud)
我得到的错误信息是Indirection requires pointer operand.有人可以帮我解决这个问题吗?
正如我刚刚了解到的,对于一个指针p,有两种等效的方式来访问被引用对象的成员,即p->foo和(*p).foo.
是否有最适合使用的技术论据?
注意:我读到的一个论点是,.它更安全,因为它不能重载,而->可以.但是,我想,必须有更多的参数,因为在我工作的大多数C++代码中,我只看到->-construct.
可能重复:
点(.)运算符和C++中的 - >有什么区别?
使用点符号和指针方式有什么区别?
使用或不使用指针实例化对象.
实例化w/oa指针=然后使用点表示法
实例化w/a指针=然后使用 - >
两者有什么不同?何时以及为什么要使用另一个?
有人可以清楚地解释CComPtr 之间.Release()
和
之间的区别
->Release()吗?
准确地说,在任何一种情况下如何发生内存管理?
我从C++开始,我正在尝试通过组合扩展std :: map类.我想使用这个类CardPackage有id和指针的私人地图,我EntityCards和实现三个方法AddCard,GetCard并且RemoveCard将访问私人地图m.
问题是我无法使用m方法(find和end),因为我收到以下错误消息:
expression must have a pointer type
我知道m需要成为一个指针,用箭头符号(或点)来访问,但我无法弄清楚是否要使代码适应我的要求.
标题:
#include <EntityCard.h>
class CardPackage
{
public:
CardPackage();
~CardPackage();
void AddCard(EntityCard* card);
EntityCard* GetCard(int id);
bool RemoveCard(int id);
private:
map<int, EntityCard*> m;
};
Run Code Online (Sandbox Code Playgroud)
资源:
#include "CardPackage.h"
CardPackage::CardPackage()
{
}
CardPackage::~CardPackage()
{
}
void CardPackage::AddCard(EntityCard *card)
{
m[card->ID] = card;
}
EntityCard* CardPackage::GetCard(int id)
{
if (id < 1) { …Run Code Online (Sandbox Code Playgroud) 由于到目前为止我只使用过 Web 和 .NET 语言,因此我正在从我的工作中学习高级编程课程中的 C++。在中途测试中,讲师将我对 (*a).b 的所有使用标记为错误并因此被扣分,这可能会对我的最终分数产生负面影响,我需要一个近乎完美的分数才能将工作从网络堆栈过渡到应用程序stack,你们中的一些人能帮我解决这个争端吗?
据说*C 中的运算符意味着"指向变量的指针",并且以下代码是合法的:
#include <stdio.h>
int main(){
int a=5;
int *p=&a;
printf("%d\n", *p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但以下代码是非法的:
#include<stdio.h>
struct pair{
int a,b;
};
int main(){
struct pair Alice, *Bob=&Alice;
Alice.a=1;
Alice.b=2;
printf("%d %d\n",*Bob.a,*Bob.b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
那么,为什么*运算符适用于指向普通变量的指针,但是对指向结构的指针不起作用?
一位朋友正在学习数据结构课程,我正在尝试解释链表上下文中的差异。我真的应该知道这一点,但是在专注于高级框架之后,我有点生疏了。我知道“箭头与指针一起使用”,但仅此而已。
本质上,在 C 中,访问某个变量的属性时点和箭头有什么区别?另外,因为我的心情特别愚蠢,这在 C++ 中是一样的,还是改变了?
在数组中使用.和之间有什么区别->?那是:
(*foo[i]).bar
Run Code Online (Sandbox Code Playgroud)
VS
foo[i]->bar
Run Code Online (Sandbox Code Playgroud)
或者:它们是一样的吗?
编辑: BTW,其他参考只在foo.bar和之间询问foo->bar.我知道不同之处.但是最近,我正在阅读一些(*foo).bar我认为应该使用的样本foo->bar.