首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将以下C++代码转换为对象C或C类

将以下C++代码转换为对象C或C类
EN

Stack Overflow用户
提问于 2012-10-17 07:38:33
回答 1查看 511关注 0票数 0

我可以将C++代码重命名为.mm文件,并将项目中的所有.m文件更改为.mm,但在更改为.mm后,其中一个.m文件中存在一个令人困惑的错误

代码语言:javascript
复制
         CFDictionaryRef routeChangeDictionary = inPropertyValue;

它说不能用'const void*‘类型的值初始化变量类型` `CFDictionaryRef (又称’const_CFDictionary*‘)。

在将所有内容重命名为.mm后,我不知道这样的错误

总之,我有原始的.CPP文件MeterTable.h

代码语言:javascript
复制
    #include <stdlib.h>
     #include <stdio.h>
     #include <math.h>


 class MeterTable
 {
public:

MeterTable(float inMinDecibels = -80., size_t inTableSize = 400, float inRoot = 2.0);   
~MeterTable();

float ValueAt(float inDecibels)
{
    if (inDecibels < mMinDecibels) return  0.;
    if (inDecibels >= 0.) return 1.;
    int index = (int)(inDecibels * mScaleFactor);
    return mTable[index];
}
 private:
float   mMinDecibels;
float   mDecibelResolution;
float   mScaleFactor;
float   *mTable;
  };

MeterTable.CPP #包含"MeterTable.h“

代码语言:javascript
复制
 inline double DbToAmp(double inDb)
 {
  return pow(10., 0.05 * inDb);
 }

 MeterTable::MeterTable(float inMinDecibels, size_t inTableSize, float inRoot)
: mMinDecibels(inMinDecibels),
mDecibelResolution(mMinDecibels / (inTableSize - 1)), 
mScaleFactor(1. / mDecibelResolution)
 {
if (inMinDecibels >= 0.)
{
    printf("MeterTable inMinDecibels must be negative");
    return;
}

mTable = (float*)malloc(inTableSize*sizeof(float));

double minAmp = DbToAmp(inMinDecibels);
double ampRange = 1. - minAmp;
double invAmpRange = 1. / ampRange;

double rroot = 1. / inRoot;
for (size_t i = 0; i < inTableSize; ++i) {
    double decibels = i * mDecibelResolution;
    double amp = DbToAmp(decibels);
    double adjAmp = (amp - minAmp) * invAmpRange;
    mTable[i] = pow(adjAmp, rroot);
}

}

代码语言:javascript
复制
   MeterTable::~MeterTable()
{
free(mTable);
}

有什么想法可以把C++文件重写成真正的对象C类吗?它很短。

EN

回答 1

Stack Overflow用户

发布于 2012-10-17 07:53:16

当我混合使用C++和Objective-C代码时,我遇到过像这样的很难追踪的问题。如果您从XCode的属性中将文档设置为Objective C++,请确保对调用C++代码的Objective-C文件执行相同的操作,并且是#including所需的C++头文件。

我以前遇到过这种情况,它得到了最奇怪的错误消息。如果不是这样,很抱歉在这里混淆了答案。有时,当有多个头文件(包括C++类引用)时,跟踪会变得更加困难。将所有文件(如果不是大型项目)设置为"Objective C++“也无伤大雅。

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

https://stackoverflow.com/questions/12925060

复制
相关文章

相似问题

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