2011-01-15 2 views
2

У меня есть исходный код на C++, который я бы переписал в Objective C. Это очень помогло бы мне, если бы кто-нибудь мог написать мне заголовочный файл для этого кода. Когда я получу Headerfile, я смогу переписать остальную часть исходного кода.Переписать код на C++ в Objective C

Было бы очень приятно, если бы кто-то мог мне помочь.

Благодаря

Я буду Poste исходный код здесь:

#include <stdlib.h> 
#include <iostream.h> 

#define STATES 5 

int transitionTable[STATES][STATES]; 

// function declarations: 
double randfloat     (void); 
int chooseNextEventFromTable (int current, int table[STATES][STATES]); 
int chooseNextEventFromTransitionTablee (int currentState); 
void setTable     (int value, int table[STATES][STATES]); 


////////////////////////////////////////////////////////////////////////// 

int main(void) { 
    int i; 

    // for demo purposes: 
transitionTable[0][0] = 0; 
transitionTable[0][1] = 20; 
transitionTable[0][2] = 30; 
transitionTable[0][3] = 50; 
transitionTable[0][4] = 0; 
transitionTable[1][0] = 35; 
transitionTable[1][1] = 25; 
transitionTable[1][2] = 20; 
transitionTable[1][3] = 30; 
transitionTable[1][4] = 0; 
transitionTable[2][0] = 70; 
transitionTable[2][1] = 0; 
transitionTable[2][2] = 15; 
transitionTable[2][3] = 0; 
transitionTable[2][4] = 15; 
transitionTable[3][0] = 0; 
transitionTable[3][1] = 25; 
transitionTable[3][2] = 25; 
transitionTable[3][3] = 0; 
transitionTable[3][4] = 50; 
transitionTable[4][0] = 13; 
transitionTable[4][1] = 17; 
transitionTable[4][2] = 22; 
transitionTable[4][3] = 48; 
transitionTable[4][4] = 0; 

    int currentState = 0; 
for (i=0; i<10; i++) { 
    std::cout << currentState << " "; 
     currentState = chooseNextEventFromTransitionTablee(currentState); 
    } 
    return 0; 
}; 


////////////////////////////////////////////////////////////////////////// 


////////////////////////////// 
// 
// chooseNextEventFromTransitionTable -- choose the next note. 
// 

int chooseNextEventFromTransitionTablee(int currentState) { 
int targetSum = 0; 
int sum   = 0; 
int targetNote = 0; 
int totalevents = 0; 
int i; 

currentState = currentState % STATES; // remove any octave value 
for (i=0; i<STATES; i++) { 
    totalevents += transitionTable[currentState][i]; 
} 
targetSum = (int)(randfloat() * totalevents + 0.5); 
while (targetNote < STATES && 
    sum+transitionTable[currentState][targetNote] < targetSum) { 
    sum += transitionTable[currentState][targetNote]; 
    targetNote++; 
} 

return targetNote; 
} 





////////////////////////////// 
// 
// randfloat -- returns a random number between 0.0 and 1.0. 
// 

double randfloat(void) { 
    return (double)rand()/RAND_MAX; 
} 



////////////////////////////// 
// 
// setTable -- set all values in the transition table to the given value. 
// 

void setTable(int value, int table[STATES][STATES]) { 
    int i, j; 
    for (i=0; i<STATES; i++) { 
     for (j=0; j<STATES; j++) { 
     table[i][j] = value; 
     } 
    } 
} 

Update

Я не только компиляции файла заголовка есть другой файл, я компиляции слишком

Исходный код:

// 
// markovThreadsChainsViewController.m 
// markovThreadsChains 
// 
// Created by Philippe Mokrzycki on 15.01.11. 
// Copyright 2011 TGM. All rights reserved. 
// 

#import "markovThreadsChainsViewController.h" 
#import "markov.h" 
//#import "markovChainOC.h" 

@implementation markovThreadsChainsViewController 

@synthesize mcValueLabel, threadStartGenerateButton, threadStopGenerateButton; 

- (IBAction) startThreadGen:(UIButton *)sender{ 
    threadStopGenerateButton.hidden=NO; 
    threadStartGenerateButton.hidden=YES; 
    mcValueLabel.text = @"0"; 

    currentState=0; 

// markovChainOC *mCobc = [[markovChainOC alloc]init]; 

// [mCobc setCurrentState:0]; 
    [NSThread detachNewThreadSelector:@selector(startThreading) toTarget:self withObject:nil]; 
} 

- (IBAction) stopThreadGen:(UIButton *)sender{ 
    threadStopGenerateButton.hidden=YES; 
    threadStartGenerateButton.hidden=NO; 
    [NSThread detachNewThreadSelector:@selector(stopThreading) toTarget:self withObject:nil]; 
} 

- (void) startThreading { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 

    [NSThread sleepForTimeInterval:3]; 
    [self performSelectorOnMainThread:@selector(markovGen) withObject:nil waitUntilDone:NO]; 
    [pool release]; 
} 

- (void) stopThreading { 
    [NSThread cancelPreviousPerformRequestsWithTarget:self]; 
} 

- (void)markovGen{ 
    transitionTable[0][0] = 25; 
    transitionTable[0][1] = 25; 
    transitionTable[1][0] = 25; 
    transitionTable[1][1] = 25; 

// int actualValue = [mCobc getCurrentState]; 

    int actualValue = currentState; 
    mcValueLabel.text = [NSString stringWithFormat:@"%", actualValue]; 
    currentState = chooseNextEventFromTransitionTablee(currentState); 
    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(markovGen) userInfo:nil repeats:NO]; 

} 


/* 
// The designated initializer. Override to perform setup that is required before the view is loaded. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { 
     // Custom initialization 
    } 
    return self; 
} 
*/ 

/* 
// Implement loadView to create a view hierarchy programmatically, without using a nib. 
- (void)loadView { 
} 
*/ 


/* 
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 
*/ 


/* 
// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
*/ 

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
    [mcValueLabel release]; 
    [threadStartGenerateButton release]; 
    [threadStopGenerateButton release]; 
// [mCobc release]; 
    [super dealloc]; 
} 

@end 
+3

Почему вы хотите переписать этот код в ObjC? Вы можете установить цель компиляции в «Objective C++», и Xcode будет скомпилировать код C++. –

+2

Компилятор также примет код C++, нет необходимости переписывать его в объекте C. – KaiserJohaan

+0

Спасибо за быстрый ответ, я знаю, что я могу скомпилировать его в этой форме, но мне нужно реализовать функции в другой программе, и эта программа написана в Objective C –

ответ

2

Просто поместите эти строки в файл заголовка, и вы должны иметь возможность включать заголовок и вызывать функции из любого другого исходного файла Objective-C или C.

(Для поддержки C++ также, возможно, придется поставить extern "C" { ... } вокруг них, если вы не компилируете все, как C++ или Objective-C++.)

#pragma once 

#define STATES 5 

int transitionTable[STATES][STATES]; 

// function declarations: 
double randfloat     (void); 
int chooseNextEventFromTable (int current, int table[STATES][STATES]); 
int chooseNextEventFromTransitionTablee (int currentState); 
void setTable     (int value, int table[STATES][STATES]); 

Более подробно:

Чтобы использовать эти функции из другого класса, вам понадобятся следующие файлы в вашем проекте:

  • markov.h (или все, что вы решили назвать его), содержащий следующие строки выше.
  • markov.c (или что вы решили назвать его), содержащий другие вещи из вашего исходного файла для функции main, которую вы должны удалить

Тогда за исключением, другие файлы, которые используют функции должны введите строку #include "markov.h", а затем вы сможете позвонить им.

Если вы получаете ошибки компоновщика о недостающих функциях, это означает, что вы не компилируете markov.c как часть проекта или есть некоторые параметры, вызывающие неправильное соответствие имен функций.

+0

Благодаря этим работали для меня, но теперь у меня есть еще одна проблема, когда я пытаюсь скомпилировать свою программу, я получаю сообщение об ошибке: «_chooseNextEventFromTransitionTablee», ссылочных от: - [markovThreadsChainsViewController markovGen] в markovThreadsChainsViewController.o Символ (ы) не найден collect2: ld возвращен 1 статус выхода –

+0

Скомпилируете ли вы свой исходный файл? Заголовок сам по себе недостаточен: вам также нужно скомпилировать исходные функции или ссылку на библиотеку, содержащую их. –

+0

Я компилирую не только заголовок Я хотел бы использовать эту функцию в другом классе –

3

Этот код не имеет ничего объектно-ориентированного в нем вообще. Просто измените iostream.h на stdio.h и cout на printf. Тогда это обычная программа на C.

+0

Ok спасибо я попробую это –

 Смежные вопросы

  • Нет связанных вопросов^_^