如何在方法中返回此

Mar*_*Chw 1 c++

我有一个类Image,我需要返回这个类的实例.什么是简化方法呢?我是一个java程序员并且"返回这个"给我一个错误.

#include <string>
#include "AEEImage.h"

using namespace std;

IImage *image;
Image *img;

Image::Image()
{
    image = new IImage();
}

Image::~Image()
{
    delete image;
    image = NULL;
}

 Image *createImage(string str)
{
    return /*return instance of this class*/;
}
Run Code Online (Sandbox Code Playgroud)

这是Image的定义:

#pragma once

#include <string>
using namespace std;

class Image
{
public:
    Image();
    ~Image();
    Image createImage(string str);
    Image createImage(const Image *img, int x, int y, int with, int height, int transform);
    Image createImage(istream is);
};
Run Code Online (Sandbox Code Playgroud)

我必须在C++中编写一个类似于JAVA ME中的Image类的链接(链接): - 这个类的名称(图像) - 这些方法的名称,参数类型和返回类型

Mik*_*our 8

this仅适用于非静态成员函数; 它们在一个对象上被调用,并this指向该对象.createImage()是非会员的职能; 它没有在一个对象上调用,所以没有this指针.

据推测,它应该创建一个图像并返回指向它的指针.也许你想要:

return new Image;
Run Code Online (Sandbox Code Playgroud)

请记住,delete一旦不再需要它,调用者就会对该对象负责- 在C++中没有垃圾收集.你最好学习RAII来学习如何在C++中自动管理动态对象; 特别是,智能指针可以在这里做到这一点:

std::unique_ptr<Image> createImage() {
    return std::unique_ptr<Image>(new Image);
}
Run Code Online (Sandbox Code Playgroud)

一般来说,你应该忘记你在Java中学到的任何习语,因为那是一种非常不同的语言.关于C++ 有很多好书.

您还应该避免全局变量,特别是对于逻辑上属于类实例的事物.它看起来非常像IImage *image;应该是一个成员Image而不是一个全局变量(虽然它可能已经是;我不知道,因为你还没有发布定义Image).

更新:您现在说它createImage是一个成员,并且该类应该模拟您链接到的Java类.在那种情况下,它应该是static.对于类成员,它与Java中的含义大致相同:它与类本身相关联,而不是与任何特定对象相关联.然后定义需要限定名称Image::以指示它是成员,而不是命名空间中声明的不同函数.所以你想要这样的东西:

class Image {
public:
    // some members
    static Image * createImage(string); // Add "static" to match the Java class.
                                        // Return a pointer (or a smart pointer)
};

Image * Image::createImage(string) {    // Add "Image::" to indicate it's a member
    return new Image;
}

// Usage example:
Image * image = Image::createImage("whatever");  // "::" rather than Java's "."
Run Code Online (Sandbox Code Playgroud)

需要注意的是返回Image,而不是Image *(或智能指针)将返回一个副本中的Image对象,这是(可能)不是你想要的; 这是与Java的另一个重大区别,其中类对象总是通过引用(*)传递.指针是C++对Java的对象引用最接近的东西.

(*)对学生的注意:通过"通过引用传递",我的意思是对象本身没有被克隆; 对象引用按值传递.