首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“‘this”不能在常量表达式错误中使用

“‘this”不能在常量表达式错误中使用
EN

Stack Overflow用户
提问于 2021-09-24 00:00:30
回答 1查看 64关注 0票数 0

错误在第76行int res[mSize];,问题在mSize上。这似乎是一个简单的解决办法,但我想不出来。如果有人能想出办法或者给我指出正确的方向,我将不胜感激。

另外,解构函数~MyContainer(),我不确定我是否正确使用它,或者是否有正确的位置来放置它。

下面是我的代码:

代码语言:javascript
运行
复制
#include <iostream>

using namespace std;

class MyContainer
{
private:
    int* mHead; // head of the member array
    int mSize;  // size of the member array

public:
    MyContainer();
    MyContainer(int*, int);
    //~MyContainer();
    void Add(int);
    void Delete(int);
    int GetSize();
    void DisplayAll();
    int FindMissing();
    ~MyContainer() {}
};

MyContainer::MyContainer()
{
    mHead = NULL;
    mSize = 0;
}

MyContainer::MyContainer(int* a, int b)
{
    mHead = a;
    mSize = b;
}

void MyContainer::Add(int a)
{
    *(mHead + mSize) = a;
    mSize++;
}

void MyContainer::Delete(int a)
{
    int index;
    for (int i = 0; i < mSize; i++)
    {
        if (*(mHead + i) == a)
        {
            index = i;
            break;
        }
    }

    for (int i = index; i < mSize; i++)
    {
        *(mHead + i) = *(mHead + i + 1);
    }
    mSize--;
}

int MyContainer::GetSize()
{
    return mSize;
}

void MyContainer::DisplayAll()
{
    cout << "\n";
    for (int i = 0; i < mSize; i++)
    {
        cout << *(mHead + i) << " ";
    }
}

int MyContainer::FindMissing()
{
    int res[mSize];
    int temp;
    int flag = 0;
    for (int i = 1; i <= mSize; i++)
    {
        flag = 0;
        for (int j = 0; j < mSize; j++)
        {
            if (*(mHead + j) == i)
            {
                flag = 1;
                break;
            }
        }

        if (flag == 0)
        {
            temp = i;
            break;
        }
    }
    return temp;
}


int main() 
{
    const int cSize = 5; 
    int lArray[cSize] = { 2, 3, 7, 6, 8 }; 
    MyContainer lContainer(lArray, cSize); 
    lContainer.DisplayAll(); 
    lContainer.Delete(7); 
    lContainer.DisplayAll(); 
    cout << "Size now is: " << lContainer.GetSize() << endl; lContainer.Add(-1); 
    lContainer.Add(-10); 
    lContainer.Add(15); 
    lContainer.DisplayAll(); 
    cout << "Size now is: " << lContainer.GetSize() << endl; 
    cout << "First missing positive is: " << lContainer.FindMissing() << endl;
    system("PAUSE"); return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2021-09-24 00:04:11

int res[mSize];

在编译时必须知道数组mSize的大小。您不能在这里使用变量。一种选择是使用不会超过的较大值来定义宏。

代码语言:javascript
运行
复制
static const int kLargeSize =100;
int res[kLargeSize];

根据注释进行编辑- const和constexpr是比宏更好的选择。

或者更好的是,您可以使用std::vector - https://en.cppreference.com/w/cpp/container/vector

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69308097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档