Sponsored Content
Top Forums Programming Passing an instance of struct to functions in other src files Post 302510089 by LMHmedchem on Friday 1st of April 2011 01:42:31 PM
Old 04-01-2011
Quote:
Originally Posted by Corona688
You don't use "." for pointers, you use ->.

You should include external_funcs.h in load_struct.cpp and calc_struct.cpp too. Otherwise the compiler can't warn you when you create the functions differently than you specified in your header file -- that's a bug which can be a real pain to find the source of.

Beyond that, your code looks fine.
Thanks, I knew there were a few things I forgot.

I extended the exercise to have the calc function called by the loading function and was surprised to find that you don't use the & (if you want it to compile).

Code:
// main.cpp
#include <iostream>
#include <stdio.h>
#include "struct1.h"
#include "extern_funcs.h"

int main(int argc, char**argv) {

   STRUCT1 myStruct1;
   int answer = 0;
   int a, b;
   a = 1; b = 2; 
  
   // call functionto load data into stuct
   load_struct( &myStruct1, a, b, c, d, &answer );

   // print data from struct
   std::cout << "var_a main " << myStruct1.var_a << std::endl;
   std::cout << "var_b main " << myStruct1.var_b << std::endl;

   std::cout << "the answer is " << answer << std::endl;

   return 0;
}

Code:
// load_struct.cpp
#include "struct1.h"
#include "extern_funcs.h"

void load_struct( STRUCT1 *myStruct1, int var_a, int var_b, int *answer ) {

   // load struct with passed data
   myStruct1->var_a = var_a;
   myStruct1->var_b = var_b;

   // call to get answer
   *answer = calc_struct( myStruct1 );

   return;
}

Code:
// calc_struct.cpp
#include <stdio.h>
#include "struct1.h"
#include "extern_funcs.h"

int calc_struct( STRUCT1 *myStruct1 ) {
   int answer;
   // perform calcualtion
   answer = myStruct1->var_a + myStruct1->var_b;
   return answer;
}

Code:
// struct1.h
// structure definition

typedef struct STRUCT1 {
   int var_a;
   int var_b;
} STRUCT1;

Code:
// external_funcs.h
// prototypes for external functions

extern "C" {
   void load_struct( STRUCT1 *myStruct1, int var_a, int var_b, int *answer );
   int calc_struct( STRUCT1 *myStruct1 );
}

The call to load, passing the pointer to myStruct1, is set up as,
load_struct( &myStruct1, a, b, c, d, &answer );

where both myStruct1 and answer are pointers to a var declared in main().

The call to calc seems to be passing the same instance of struct by value,
*answer = calc_struct( myStruct1);

and doesn't compile if you try to pass it as a pointer,
*answer = calc_struct( &myStruct1);

Is that because the compiler already sees the value as pointer, and so would be trying to do **myStruct1? All of the programming I initially learned was in Fortran, where everything is passed as a pointer and there is usually only one way to do most things.

Would this work just as well if the prototypes were absent the extern "C" tag? In the past, I have had a few issues with things in header files where the compiler complained that something was declared in more than one place. I have also has some issues with the linker finding things when the src is spread across multiple src files. I make enough little errors that I can't always be sure if the issue is my choice of method, or its implementation. It appears that it is proper to have struct/class definitions, or function prototypes, in header files that are included in multiple places. Is that correct?

LMHmedchem
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

passing command line parameters to functions - sh

All, I have a sh script of the following tune: function a () { #functionality.. } function b () { #functionnlity.. } function check () { # this function checks for env and if all fine call build } function usage () { #sh usage details } function build () { #calls either a or b or... (5 Replies)
Discussion started by: vino
5 Replies

2. Shell Programming and Scripting

Passing arrays between functions

Hi, I have a function that hold 3 arrayies. I need to pass them to another function as an input, for further use Could you please explain how to do that. Thanks (5 Replies)
Discussion started by: yoavbe
5 Replies

3. UNIX for Advanced & Expert Users

Passing socket struct between kernel threads - module programming

I write kernel module with kernel threads using linux/kthread.h on 2.6.* kernel I tried to passing data between two kernel threads with data argument of kthread_run( fun, data , NAME ); but this is not work I dont know why. I tried many possibility and nothing works. So I thought that... (0 Replies)
Discussion started by: marcintom
0 Replies

4. Homework & Coursework Questions

C++ struct pointers & functions

Hi All, My latest assignment (practice not coursework!) is to write prototype interactive exam/test console application. I've used structs to store the question information (not sure if this was the best way to do it?) and I have the following code that outputs each question and it's possible... (0 Replies)
Discussion started by: pondlife
0 Replies

5. UNIX for Dummies Questions & Answers

Passing struct through unix pipe -solved

EDIT: Nevermind, called a friend who is good at this stuff and he figured it out :D Hi all, So I'm trying to teach myself to write programs for unix in c. I am currently creating a program, and I need to pass a struct through a pipe, but I can't figure out how. The struct I want to pass... (0 Replies)
Discussion started by: twnsfn34
0 Replies

6. Homework & Coursework Questions

Passing pointers to struct

Hi, i'm trying to copy a struct into a binary file using the unix instruction write, so i declare and fill the struct "superbloque" in one function "initSB" and then i pass the pointer to another function called bwrite (for block write) which calls write. The problem is that i call the function... (2 Replies)
Discussion started by: ignatius3
2 Replies

7. Shell Programming and Scripting

Passing variable to child instance of make

hi, I am trying to export a variable from the parent makefile to a child instance of my makefile within the same directory. the relevant code in my parent makefile is: libvar := $(notdir $(basename ../src/file1)) export libvar .PHONY: library library: make -f makechild libvar=file1... (0 Replies)
Discussion started by: bacpp
0 Replies

8. Programming

Using pointers to struct members as args to functions

In a well-known book on the C language, there is an example of an efficient method for using a struct member as an argument to a function. (I'm a C noob, but I believe the correct terminology might be: use call-by-reference instead of call-by-value.) The function is printf. Anyway, here's a... (5 Replies)
Discussion started by: uiop44
5 Replies

9. Shell Programming and Scripting

Python passing multiple parameters to functions

Hi, I am a beginner in python programming. In my python script have a main function which calls several other functions. The main function gets its input by reading lines from a input text file. I call the main function for every line in input text file through a loop. def main(line): var1... (6 Replies)
Discussion started by: ctrld
6 Replies

10. Shell Programming and Scripting

ksh While Loop - passing variables to functions

I'm reading a text file using a while loop but when I call a function from within this loop it exits that same iteration … even though there are many more lines in the file to be read. I thought it was something to do with the IFS setting but it appears that a function call (when run... (3 Replies)
Discussion started by: user052009
3 Replies
All times are GMT -4. The time now is 08:12 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy