小编Lih*_*ihO的帖子

Visual Studio sizeof非法操作数

我目前正在将一个在Linux上开发的程序移植到Win32.在其他问题中,我有一个非常奇怪的问题.头文件包含以下内容:

namespace Networking {
  struct  MetaStruct
  {
    int   iDataType;
    int   iDataSize;
    void* pData;
  };

  const int MetaStructSize = sizeof(MetaStruct) - sizeof(MetaStruct::pData);
};
Run Code Online (Sandbox Code Playgroud)

这在Linux上编译很好,但是在使用VS2010编译Win32时遇到了这个错误: Networking.hpp(50): error C2070: '': illegal sizeof operand

我尝试添加Networking::之前MetaStruct但它没有改变任何东西.奇怪的是VS2010给了我正确的值,sizeof当我用鼠标悬停它,但不会编译它.为什么?

c++ windows sizeof visual-studio visual-c++

3
推荐指数
1
解决办法
2597
查看次数

C++如何从函数返回数组?

我是C++的新手,我很难尝试获取一个函数(它接受一个数组)来返回一个数组.该函数是一个非常基本的排序算法,适用于大小为4的整数数组.具体如下:

int[] sortArrayAscending(int arrayToSort[3]) {
    int sortedArray[3];
    sortedArray[0] = minOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    sortedArray[1] = lowerMidOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    sortedArray[2] = higherMidOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    sortedArray[3] = maxOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    return sortedArray;
}
Run Code Online (Sandbox Code Playgroud)

我想我真的很困惑我需要使用的语法(函数调用min,lower,higher,max都可以正常工作.

我真的很感激一些帮助.

谢谢

EDIT2:感谢您的所有评论.由于@ Rook和@Bob Yoplait的回答,我现在已经解决了这个问题.代码用于:

   int* sortArrayAscending(int arrayToSort[4], int sortedArray[4]) {
    sortedArray[0] = minOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    sortedArray[1] = lowerMidOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    sortedArray[2] = higherMidOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    sortedArray[3] = maxOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    return sortedArray;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int testNumbers[4] = {8,14,1,27};
    int testSorted[4];
    sortArrayAscending(testNumbers,testSorted);

    for (int i = 0; i < 4; i++) {
        cout << testSorted[i] << endl;
    }

    system("pause");
    return …
Run Code Online (Sandbox Code Playgroud)

c++ arrays dynamic-memory-allocation dynamic-arrays

3
推荐指数
1
解决办法
328
查看次数

如何使8位位图在C++中显示为单色?

当我设置并创建这样的24位位图时:

   //fileheader
    BITMAPFILEHEADER* bf = new BITMAPFILEHEADER;
    bf->bfType = 0x4d42;
    bf->bfSize = 6054400 + 54;
    bf->bfOffBits = 54;

    //infoheader
    BITMAPINFOHEADER* bi = new BITMAPINFOHEADER;
    bi->biSize = 40;
    bi->biWidth = 2752;
    bi->biHeight = -733;
    bi->biPlanes = 1;
    bi->biBitCount = 24;
    bi->biCompression = 0;
    //bi->biSizeImage = 6054400;
    bi->biXPelsPerMeter = 2835;
    bi->biYPelsPerMeter = 2835;
    bi->biClrUsed = 0;
    bi->biClrImportant = 0;

    pFrame->GetImage(m_imageData);

    //
    //create bitmap...
    //(hbit is a global variable)

    BITMAPINFO* bmi;
    bmi = (BITMAPINFO*)bi; 
    HDC hdc = ::GetDC(NULL);

    hbit = CreateDIBitmap(hdc, bi, CBM_INIT, …
Run Code Online (Sandbox Code Playgroud)

c++ gdi image bitmap

3
推荐指数
1
解决办法
2934
查看次数

在rollDice函数内调用srand(time(NULL))时出现问题

当我在第一次使用 srand(time(NULL))rollDice()功能,它没有工作.但是当我把它放在主要部分时,它可以工作.这是为什么?你能告诉我逻辑吗?

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int rollDice(void) {
    return (1+rand()%6) + (1+rand()%6);
}
int main(void) {
    int roll;
    srand(time(NULL));          
    roll = rollDice();
    printf("You rolled %d.\n", roll);

    enum Gamestatus {WON,LOST,CONTINUE};
    enum Gamestatus status;

    while(status==CONTINUE){
        printf("You are rolling again: \n");
        printf("You rolled %d\n", roll = rollDice());

        if (targetPoint==roll){
            printf("You win!");
            status=WON;
        }
        else if(7==roll){
            printf("You lost!");
            status=LOST;
        }
        else
            status=CONTINUE;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c random srand

3
推荐指数
2
解决办法
9417
查看次数

cin到bools的矢量

我有这个代码:

#include <iostream>
#include <vector>

using namespace std;

int main(){
    vector <bool> v;
    cin >> v[0];
return 0;   
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能这样做?编译器不会编译它,但我在向量中有其他变量类型,它可以正常工作.这有什么问题?

c++ stl boolean vector

3
推荐指数
1
解决办法
336
查看次数

用空格替换std :: string中的特定字符

以下代码从char数组中正确删除了标点符号:

#include <cctype>
#include <iostream>

int main()
{
    char line[] = "ts='TOK_STORE_ID'; one,one, two;four$three two";
    for (char* c = line; *c; c++)
    {
        if (std::ispunct(*c))
        {
            *c = ' ';
        }
    }
    std::cout << line << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

如果line类型是这样的代码将如何看std::string

c++ string parsing stdstring

3
推荐指数
3
解决办法
3375
查看次数

为什么我不能访问这个班级的成员?

我有以下三个类定义:

class String
{
    public:
        String() {}
        String(const char *) {}
};

class ClassA
{
    public:
        ClassA(const String &) {}
};

class ClassB
{
    public:
        ClassB(const ClassA &, const String & = String()) {}
        void method() {}
};
Run Code Online (Sandbox Code Playgroud)

现在假设我要创建一个实例ClassB:

String name("test");
ClassA item(ClassB(name));
Run Code Online (Sandbox Code Playgroud)

这不起作用:

error: request for member 'method' in 'item', which is of non-class
  type 'ClassA ()(ClassB)'

这个错误是什么意思?ClassA ()(ClassB)编译器一直指的是什么奇怪的类型?

c++ syntax initialization class variable-initialization

3
推荐指数
1
解决办法
153
查看次数

使用c_str()返回的指针删除动态分配的std :: string会导致C++中的内存泄漏吗?

我正在写一个函数来加载一个txt文件并返回一个const char*下面的函数工作,我的问题是如果我不存储*pS然后调用delete pS,这个函数会导致内存泄漏吗?

const char* loadFile(string fname)
{
   string line,text;
   ifstream in(fname);
   while(std::getline(in, line))
   {
       text += line + "\n";
   }

   string *pS = new string(text);
   const char* data = pS->c_str();

   return data;
}
Run Code Online (Sandbox Code Playgroud)

该函数在我的代码中使用如下

static const char* pVS;
...
pVS = loadFile("VS.txt");
...
delete pVS;
Run Code Online (Sandbox Code Playgroud)

这会删除字符串吗?

c++ string memory-leaks memory-management return-value

3
推荐指数
1
解决办法
1058
查看次数

指针是否总是导致内存泄漏,或者当它们超出范围时会被删除?

我正在学习c ++,而我正在阅读关于指针的内容.我对以下场景感到好奇:

场景1:

如果我没有弄错,如果用户输入-1,就会出现内存泄漏:

#include <iostream>
using namespace std;

int main(){

    int *p = new int;

    cout << "Please enter a number: ";
    cin >> *p;

    if (*p == -1){
        cout << "Exiting...";
        return 0;
    }

    cout << "You entered: " << *p << endl;

    delete p;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

场景2:

但是在下面的代码中会发生什么?根据我的阅读并纠正我,如果我错了,当在第二个场景中声明指针时,一旦你超出范围,指针就会被清除.因此,如果用户没有进入-1,*p将自动清除?

#include <iostream>
using namespace std;

int main(){

    int x;
    int *p = &x;

    cout << "Please enter a number: ";
    cin >> …
Run Code Online (Sandbox Code Playgroud)

c++ pointers memory-leaks memory-management dynamic-allocation

3
推荐指数
1
解决办法
296
查看次数

如何在C++中匹配两个数组的内容

我有两个单独的单词数组,例如:

array1 = word1, word2, word3
array2 = word4, word5, word6
Run Code Online (Sandbox Code Playgroud)

我试图根据用户输入(这将是2个单词)匹配两个数组.例如,您输入"word1 word6",程序会给你x.你输入"word3 word4",程序给你y.不需要/不应该在每个数组内匹配(因此输入"word1 word3"不应该提供除错误之外的任何内容).

现在,我正在考虑使用string::find在输入字符串中查找每个数组的内容.然而,在那之后,我仍然坚持如何获取这些结果(如果有的话)并将它们相互匹配.

例如,我会input.find(contents of array1),如果找到了某些东西,那就拿下它array1[x],看看array2[x]通过同一输入中的单独行找到的组合是否与第三个可能组合列表相匹配.如果确实如此,我会根据它的组合拆分响应.

我知道如果我只有一个可能的匹配列表会更容易,并在输入字符串中找到.但我想保持两组单词分开,因为代码会更灵活(我会以这种方式学习更多).

希望有人可以给我一些关于如何进行的提示?

c++ arrays string containers set

2
推荐指数
1
解决办法
571
查看次数